> > A simple OO rule; creation of child objects is done in one place, this > > ensures that data consistency is always maintained. Just look at the amount > > of: new KWFrame calls > > a KWFrame* KWFrameSet::createNewFrame() would have been much nicer. > > Why not just change it to work like that then? Also I don't agree that this > is always the best way, here it might make sense, yes. In many ways it is > much nicer to pass the parent to the child in the constructor. > That is not what I meant, OO is about objects doing only what they need to know. Let me see; Ahh yes I was coding the framedia.cc the Constructur for framedia is: KWFrameDia::KWFrameDia( QWidget* parent, const char* name, KWFrame *_frame, KWordDocument *_doc, KWPage *_page, int _flags, KWFrameSet *fs ) : KDialogBase( Tabbed, i18n("Frame settings"), Ok | Cancel, Ok, parent, name, true) When I look at that I see that I receive a Name, a Frame, a Doc, a Page and a Frameset. This dialog is about ONE frame's properties. So the things I need should all be in the frame. I should be able to ask the frame which frameset is belongs to, but also which page it is on. The document it belongs to could be asked like: frame->getFrameset()->getDocument(); The flags determine which tabs are shown. This is simply not neccecarry, nor is it good GUI design (all relevant options should be visible) The flags are also used so some standard settings are made in the dialog, this again is simply faulty desing. The dialog should only touch the settings which it can configure. Summery: KDocument has a number of framesets which contain a number of frames. The info a frame needs to know (what type of frame it is for instance) needs to be embedded in the frame, and nowhere else. Creating a new frame forces you to ambed it in a frameset, so find the first relevant frameset (or create one) and add the frame by calling: frameset->createNewFrame() This will create understandable code. -- Thomas Zander zander@earthling.net The only thing worse than failure is the fear of trying something new