[gnome-devel-docs] Ran through Image Viewer in C++
- From: Johannes Schmid <jhs src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-devel-docs] Ran through Image Viewer in C++
- Date: Wed, 23 Mar 2011 20:42:43 +0000 (UTC)
commit 3ccbcf0fa6afdd0720911d8e75469409d847ccbc
Author: P. F. Chimento <philip chimento gmail com>
Date: Tue Mar 22 00:32:04 2011 +0100
Ran through Image Viewer in C++
platform-demos/C/image-viewer.cpp.page | 63 ++++++++++++-------------
platform-demos/C/image-viewer/image-viewer.cc | 2 +-
2 files changed, 32 insertions(+), 33 deletions(-)
---
diff --git a/platform-demos/C/image-viewer.cpp.page b/platform-demos/C/image-viewer.cpp.page
index d646abe..e6543c6 100644
--- a/platform-demos/C/image-viewer.cpp.page
+++ b/platform-demos/C/image-viewer.cpp.page
@@ -5,7 +5,7 @@
<info>
<link type="guide" xref="index#cpp"/>
- <desc>A little bit more than a simple "Hello world" Gtkmm application.</desc>
+ <desc>A little bit more than a simple "Hello world" GTKmm application.</desc>
<revision pkgversion="0.1" version="0.1" date="2011-03-18" status="review"/>
<credit type="author">
@@ -23,8 +23,8 @@
<synopsis>
<p>In this tutorial, you will learn:</p>
<list>
- <item><p>Some basic concepts of the C/GObject programming</p></item>
- <item><p>How to write a Gtk application in C</p></item>
+ <item><p>Some basic concepts of C++/GObject programming</p></item>
+ <item><p>How to write a Gtk application in C++</p></item>
</list>
</synopsis>
@@ -38,15 +38,15 @@
<p>Start Anjuta and click <guiseq><gui>File</gui><gui>New</gui><gui>Project</gui></guiseq> to open the project wizard.</p>
</item>
<item>
- <p>Choose <gui>Gtkmm (Simple)</gui> from the <gui>C++</gui> tab, click <gui>Forward</gui>, and fill-out your details on the next few pages. Use <file>image-viewer</file> as project name and directory.</p>
+ <p>Choose <gui>GTKmm (Simple)</gui> from the <gui>C++</gui> tab, click <gui>Forward</gui>, and fill out your details on the next few pages. Use <file>image-viewer</file> as project name and directory.</p>
</item>
<item>
<p>Make sure that <gui>Use GtkBuilder for user interface</gui> is disabled as we will
create the UI manually in this tutorial. Check the <link xref="guitar-tuner.cpp">Guitar-Tuner</link>
- tutorial using the interface builder.</p>
+ tutorial if you want to learn how to use the interface builder.</p>
</item>
<item>
- <p>Click <gui>Finished</gui> and the project will be created for you. Open <file>src/main.cc</file> from the <gui>Project</gui> or <gui>File</gui> tabs. You should see some code which starts with the lines:</p>
+ <p>Click <gui>Apply</gui> and the project will be created for you. Open <file>src/main.cc</file> from the <gui>Project</gui> or <gui>File</gui> tabs. You should see some code which starts with the lines:</p>
<code mime="text/x-csrc"><![CDATA[
#include <gtkmm.h>
#include <iostream>
@@ -58,7 +58,7 @@
<section>
<title>Build the code for the first time</title>
- <p>This is a very basic C++ code setting up Gtkmm. More details are given below; skip this list if you understand the basics:</p>
+ <p>This is a very basic C++ code setting up GTKmm. More details are given below; skip this list if you understand the basics:</p>
<list>
<item>
<p>The three <code>#include</code> lines at the top include the <code>config</code> (useful autoconf build defines), <code>gtkmm</code> (user interface) and <code>iostream</code> (C++-STL) libraries. Functions from these libraries are used in the rest of the code.</p>
@@ -67,21 +67,21 @@
<p>The <code>main</code> function creates a new (empty) window and sets the window title.</p>
</item>
<item>
- <p>The <code>kit::run()</code> call start the GTKmm mainloop, which runs the user interface and starts listening for events (like clicks and key presses). As we give the window
- as argument to that function, the application will automatically exit when
+ <p>The <code>kit::run()</code> call starts the GTKmm main loop, which runs the user interface and starts listening for events (like clicks and key presses). As we give the window
+ as an argument to that function, the application will automatically exit when
that window is closed.</p>
</item>
</list>
<p>This code is ready to be used, so you can compile it by clicking <guiseq><gui>Build</gui><gui>Build Project</gui></guiseq> (or press <keyseq><key>Shift</key><key>F7</key></keyseq>).</p>
- <p>Press <gui>Configure</gui> on the next window that appears to configure a debug build. You only need to do this once, for the first build.</p>
+ <p>Press <gui>Execute</gui> on the next window that appears to configure a debug build. You only need to do this once, for the first build.</p>
</section>
<section>
<title>Creating the user interface</title>
-<p>Now we will bring live into the empty window. <em>Gtkmm</em> organizes the user interface
-with <em>Gtk::Container</em>s that can contain other widgets and even other containers. Here we
-will use the simplest available container, a <em>Gtk::Box</em>:</p>
+<p>Now we will bring life into the empty window. GTKmm organizes the user interface
+with <code>Gtk::Container</code>s that can contain other widgets and even other containers. Here we
+will use the simplest available container, a <code>Gtk::Box</code>:</p>
<code mime="text/x-csrc"><![CDATA[
int
main (int argc, char *argv[])
@@ -116,19 +116,18 @@ main (int argc, char *argv[])
]]></code>
<steps>
<item>
- <p>The first lines create the widgets we want to use, a button for opening up an image, the image view widget itself and the box we will use as container. </p>
+ <p>The first lines create the widgets we want to use: a button for opening up an image, the image view widget itself and the box we will use as a container. </p>
</item>
<item>
- <p>The calls to <code>pack_start()</code> add the two widgets to the box and define their behaviour. The image will
- expand to any available space while the button will just be as big as needed. You will notice that we don't set
- explicit sizes on the widgets. In <em>Gtkmm</em> this is usually not needed at makes it much easier to have a layout that
+ <p>The calls to <code>pack_start</code> add the two widgets to the box and define their behaviour. The image will
+ expand into any available space while the button will just be as big as needed. You will notice that we don't set
+ explicit sizes on the widgets. In GTKmm this is usually not needed as it makes it much easier to have a layout that
looks good in different window sizes. Next, the box is added to the window.</p>
</item>
<item>
- <p>>We need to define what happens when the user clicks on the button. <em>Gtkmm</em> uses the concept of <em>signals</em> and
- the buttons fires the <em>clicked</em> signal that we can connect to some action. This is done using the <code>signal_clicked().connect()</code>
- method which tells <em>Gtkmm</em> to call the <code>on_open_image</code> when the button is clicked and
- to pass the image as additional argument to that function. We will define the <em>callback</em> in the next section.</p>
+ <p>We need to define what happens when the user clicks on the button. GTKmm uses the concept of <em>signals</em>. When the button is clicked, it fires the <em>clicked</em> signal, which we can connect to some action. This is done using the <code>signal_clicked().connect</code>
+ method which tells GTKmm to call the <code>on_open_image</code> function when the button is clicked and
+ to pass the image as an additional argument to that function. We will define the <em>callback</em> in the next section.</p>
</item>
<item>
<p>The last step is to show all widgets in the window using
@@ -140,8 +139,8 @@ main (int argc, char *argv[])
<section>
<title>Showing the image</title>
-<p>We will now define the signal handler for the <em>click</em>-signal or the
-button we mentioned before. Add this code before the <code>main()</code>
+<p>We will now define the signal handler for the <em>clicked</em> signal or the
+button we mentioned before. Add this code before the <code>main</code>
method.</p>
<code mime="text/x-csrc"><![CDATA[
static void
@@ -172,40 +171,40 @@ on_open_image (Gtk::Image* image)
]]></code>
<p>This is a bit more complicated than anything we've attempted so far, so let's break it down:</p>
<list>
- <item><p>The argument to the signal is the image object that we passed while connecting the signal, Actually the signal could have other arguments but the <em>clicked</em> doesn't have any. </p> </item>
+ <item><p>The argument to the signal is the image object that we passed while connecting the signal. Sometimes there are other arguments related to the signal, but <em>clicked</em> doesn't have any. </p> </item>
<item>
<p>The next interesting line is where the dialog for choosing the file is created using
- <code>Gtk::FileChooserDialog()</code>. The function takes the title of the dialog and
- the type of dialog this should be. In our case, it is an <em>Open</em> dialog</p>
+ <code>Gtk::FileChooserDialog</code>. The function takes the title of the dialog and
+ the type of dialog this should be. In our case, it is an <em>Open</em> dialog.</p>
</item>
<item>
<p>The next two lines add an <em>Open</em> and a <em>Close</em> button to the dialog.</p>
<p>Notice that we are using <em>stock</em> button names from Gtk, instead of manually typing "Cancel" or "Open". The advantage of using stock names is that the button labels will already be translated into the user's language.</p>
<p>The second argument to the <code>add_button()</code> method is a value to identify
- the clicked button. We use predefined values provided by Gtkmm here, too.
+ the clicked button. We use predefined values provided by GTKmm here, too.
</p>
</item>
<item>
- <p>The next two lines restrict the <gui>Open</gui> dialog to only display files which can be opened by Gtk::Image. A filter object is created first; we then add all kinds of files supported by Gtk::Pixbuf (which includes most image formats like PNG and JPEG) to the filter. Finally, we set this filter to be the <gui>Open</gui> dialog's filter.</p>
+ <p>The next two lines restrict the <gui>Open</gui> dialog to only display files which can be opened by <code>Gtk::Image</code>. A filter object is created first; we then add all kinds of files supported by <code>Gdk::Pixbuf</code> (which includes most image formats like PNG and JPEG) to the filter. Finally, we set this filter to be the <gui>Open</gui> dialog's filter.</p>
<p><code>Glib::RefPtr</code> is a smart pointer used here, that makes sure that the filter is
destroyed when there is no reference to it anymore.</p>
</item>
<item>
- <p><code>dialog.run()</code> displays the <gui>Open</gui> dialog. The dialog will wait for the user to choose an image; when they do, <code>dialog.run()</code> will return the value <code>GTK::RESPONSE_ACCEPT</code> (it would return <code>GTK::RESPONSE_CANCEL</code> if the user clicked <gui>Cancel</gui>). The <code>switch</code> statement tests for this.</p>
+ <p><code>dialog.run</code> displays the <gui>Open</gui> dialog. The dialog will wait for the user to choose an image; when they do, <code>dialog.run</code> will return the value <code>Gtk::RESPONSE_ACCEPT</code> (it would return <code>Gtk::RESPONSE_CANCEL</code> if the user clicked <gui>Cancel</gui>). The <code>switch</code> statement tests for this.</p>
</item>
<item><p>Assuming that the user did click <gui>Open</gui>, the next line loads the
- file into the Gtk::Image so that it is displayed.</p>
+ file into the <code>Gtk::Image</code> so that it is displayed.</p>
</item>
<item>
<p>In the final line of this method, we hide the <gui>Open</gui> dialog because we don't need it any more. The dialog would be hidden anyway, as it is only a local variable and is
- destroyed (and such hidden) when the scope ends.</p>
+ destroyed (and as such hidden) when the scope ends.</p>
</item>
</list>
</section>
<section>
<title>Build and run the application</title>
- <p>All of the code should now be ready to go. Click <guiseq><gui>Build</gui><gui>Build Project</gui></guiseq> to build everything again, and then <guiseq><gui>Run</gui><gui>Run</gui></guiseq> to start the application.</p>
+ <p>All of the code should now be ready to go. Click <guiseq><gui>Build</gui><gui>Build Project</gui></guiseq> to build everything again, and then <guiseq><gui>Run</gui><gui>Execute</gui></guiseq> to start the application.</p>
<p>If you haven't already done so, choose the <file>Debug/src/image-viewer</file> application in the dialog that appears. Finally, hit <gui>Run</gui> and enjoy!</p>
</section>
diff --git a/platform-demos/C/image-viewer/image-viewer.cc b/platform-demos/C/image-viewer/image-viewer.cc
index d65a2dc..271dfb7 100644
--- a/platform-demos/C/image-viewer/image-viewer.cc
+++ b/platform-demos/C/image-viewer/image-viewer.cc
@@ -1,4 +1,4 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */
+/* -*- Mode: C++; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */
#include <gtkmm.h>
#include <iostream>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]