Re: [gtkmm] Creating and setting pixmaps with strings



Thanks for the help, I can work on getting this to work in the mean time. However, I guess I didn't specify the problem exactly. I am not trying to use strings to identify variable names. The pixmap constructor and set method takes a string (or more specifically an nstring) that contains the actual file name with path and all. So, according to what I have seen, you sould be able to do something like this,

pixmapGnim01->set("../../GimsImg/gnim01lrg.xpm");

or if the file is in the current directory,

pixmapGnim01->set("./gnim01lrg.xpm");

Of course this would be a lot easier if I could get this to work because I can just pass in a string or nstring varaiable that containes the file path. Unfortunately, contrary to what the refference and tutorial suggest, I can't get it to work like that.

Daniel Bausch wrote:

Hello!

I have understood your problem. As you correctly noticed, the problem can not be solved the way you tried. A string constant like "bla" or "gnim01lrg_xpm" can not be used as a reference to a variable or constant with that name, because the computer does not know the name of the variable after the compilation of your sourcecode. This is not a limitation of gtkmm but a limitation of the C++ language. What you need is a map (see your C++ reference), to store pairs of strings and pointers to your dataconstructs, which then contain your pixmap data. Then you can use code like this:

Initialization:

#include <map>

...

map<string, char **> images;
images["a picture"] = gnim01lrg_xpm;
images["a other picture"] = gnim02lrg_xpm;

Usage:

pixmapGnim01->set(images["a picture"]);

Or:

string picture_identifier;
picture_identifier = result_of_choose_box();
pixmapGnim01->set(images[some_picture_identifier]);

I hope I could help you.
The map has an additional advantage. If you read the reference, you will notice, that you can use the list of identifier strings at another place in your program and not only to index the map. Imagine use these strings to display them in a choose box. Then you have to manage these strings only one time in your program.

Good luck.

Daniel Bausch

Am Saturday, 12. April 2003 18:41 schrieb Christopher David:

Hi all,

I'm currently working on a group project using Gtkmm 1.2 that uses
pixmaps.  According to the Gtk-- Reference, you should be able to create
a pixmap from an .xpm file by passing a string, or more specifically, an
nstring a a parameter (as long as you include the pixmap file of
course).  Now, I have gotten something like this to work:

pixmapGnim01->set(gnim01lrg_xpm);
Gtk::Pixmap *pix = new Gtk::Pixmap(gnim01lrg_xpm);

where it uses the string in the pixmap header file "gnim01lrg_xpm".
However, I have not been able to so this:

pixmapGnim01->set("gnim01lrg_xpm");
or
string pixName = "gnim01lrg_xpm";
pixmapGnim01->set(pixName);
or
Gtk::nstring *pixName = new Gtk::nstring(currPixmapName);
Gtk::Pixmap *pix = new Gtk::Pixmap(*pixName);
or
Gtk::nstring *pixName = new Gtk::nstring(currPixmapName);
pixmapGnim01->set(pixName);

and so on...

As you can see, a string or nstring variable won't work, not even a real
string of "gnim01lrg_xpm" won't work.
But put in gnim01lrg_xpm by itself without quotation marks and it does
work fine.  I can't figure out what I am doing wrong.  We really need to
store the strings and pass them into the set or constructor methods so
we can change a pixmap dynamically.  I know you can change a pixmap at
runtime, but we need to store the information so when we load a saved
program, all of the pixmaps will initialize to whatever string they are
assigned to.  BTW, I know Gtkmm 1.2 is a bit old, but we have no choice
in the matter and cannot upgrade at all.  We MUST use Gtkmm 1.2 .  Any
help here would be appreciated a lot.  Thanks.

Chris David


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









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