Re: Problem with Arrays of dialogs
- From: Jonathon Jongsma <jonathon quotidian org>
- To: Filipe Apostolo <f apostolo cbr gmail com>
- Cc: GTKmm List <gtkmm-list gnome org>
- Subject: Re: Problem with Arrays of dialogs
- Date: Wed, 08 Sep 2010 13:56:36 -0500
On Wed, 2010-09-08 at 19:44 +0100, Filipe Apostolo wrote:
> Hi to everyone,
>
> I have a class where I want to store a list of Dialogs; This List is
> dynamical.
> so I've declared an:
> std::vector <Gtk::Dialog> ;
> Here I've faced my first problem
>
> when i try to do:
>
> myList.push_back (temp_dialog);
>
> the compiler output is:
> error C2248: 'Gtk::Dialog::Dialog' : cannot access private member
> declared in class 'Gtk::Dialog'
Gtk::Dialog intentionally does not have a copy constructor. std::vector
requires elements to be copyable. You can use a
std::vector<Gtk::Dialog*> instead.
> while compiling class template member function 'void
> std::vector<_Ty>::_Insert_n(std::_Vector_const_iterator<_Ty,_Alloc>,__w64 unsigned int,const _Ty &)'
> with (...........)
>
> I tried with assign, with resize and many others methods of vector
> (also tried std::list) and all do the same error.
>
> Second problem:
> Because I couldn't use std::vector I created a array which I would
> allocate dynamically:
>
> Declaration: Gtk::Dialog* mPopUpDialog;
>
> void
> MyClass::LaunchPopUps(bool launch)
> {
>
> 1- int numberOfPopUps = mpSystem->GetNumberOfItems();
>
> 2- if (launch)
> 3- {
> 4- if (mActualpopUpListSize != 0)
> 5- {
> 6- LaunchVariablePopUps(false);
> 7- }
>
> 8- mActualpopUpListSize = numberOfPopUps;
>
> 9- mPopUpDialog = new Gtk::Dialog[numberOfPopUps];
>
> 10- std::map<Glib::ustring,Variable> variableMap;
> 11- std::map<Glib::ustring,Variable>::iterator variableIT;
> 12- variableMap = mpSystem->GetVariablesList();
>
> 13- int i = 0;
> 14- for (variableIT = variableMap.begin(); variableIT !=
> variableMap.end(); ++variableIT)
> 15- {
> 16- mPopUpsWindow.push_back (tempWindow);
> 17- //mPopUpDialog[i].set_parent(*pParentWindow);
> 18-
> mPopUpDialog[i].set_title(variableIT->second.GetName());
> 19- mPopUpDialog[i].show_now();
> 20- ++i;
> 21- }
>
> 22- }
> 23- else
> 24- {
> 25- for (int i = 0; i < mActualpopUpListSize; i++)
> 26- {
> 27- mPopUpDialog[i].hide();
> 28- }
>
> 29- mActualpopUpListSize = 0;
> 30- delete[] mPopUpDialog;
> 31- }
>
>
> At line 9 I allocate memory for the pop up dialogs that I need; Here
> OK;
> At line 19 I call show() instead of run() to allow the main window
> interaction with the open dialogs. Here OK;
>
> When I want to Hide the dialogs the program crashes when it reaches
> line 30. If I comment it the app runs as I want, it shows and hides
> well, however it will allocate memory without freeing it.
>
>
> Problem 3:
> I tried to use Gtk::manage at line 9: mPopUpDialog = Gtk::manage(new
> Gtk::Dialog[numberOfPopUps]); and comment line 30. But it does not
> solve the problem; The app does not crash but at debug console it
> appears a gtk error message that says:
> WARNING **: gtkm: Atempt to call Gtk::manage() on a Gtk::Window, but
> a Gtk::Window has no parent container to manage its lifetime;
>
>
> Can anyone figure out how to crate a dynamical array of Gtk::Dialogs?
I don't understand your problem. The warning is telling you that you
can't use Gtk::manage() on toplevel widgets (e.g. windows). So just
remove that call (and delete the objects yourself when they're no longer
needed)
--
Jonathon Jongsma <jonathon quotidian org>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]