From kde-core-devel Mon Aug 30 21:24:12 1999 From: Espen Sand Date: Mon, 30 Aug 1999 21:24:12 +0000 To: kde-core-devel Subject: Re: DialogCore / AboutCore classes X-MARC-Message: https://marc.info/?l=kde-core-devel&m=93604746730629 Hello Mirko. I will see what I can do to merge the two classes. I will however first complete CDialogCore so I know exactly what I will need. I hope you understand. Yes I have studied the DialogBase but I found that I could not use it for all the dialogs I have in khexedit (which area rather many and different looking). So decided to make one that was a bit more versatile, but also a bit more restrictive. Some Issues: 1. Perhaps most important. I use no resizeEvent() event handler. Everything is taken care of by the Qt layout mechanism. This makes the dialog code *much* simpler to maintain (at least my experience :-). I have reimplemented the show() method where I basically only do: setGeometry( x(), y(), minimumSize().width(),minimumSize().height() ); QDialog::show(); Thats the only place I set the size of anything in the CDialogCore. 2. I needed more Action buttons (other than Apply,Ok and Cancel) at the same time So I added Help,Default and Close, as well as the user definable buttons. In all, eight button can be used in a dialog at the same time. 3. The user can not change the text of a button after it has be created. I really don't like that possibility. The user can only set the text of the three special buttons in the constructor. 4. I needed to be able to set a default button (minor issue though). 5. This is more personal taste. I like to define as much as possible in the constructor so a dialog should normally be a class of its own. The CDialogCore constructor is shown below: (the separator controls a horizontal line above the action buttons) CDialogCore( int dialogType, int buttonMask, int defaultButton, QWidget *parent=0, const char *name = 0, const QString &title = QString::null, bool separator = false, bool modal = false, const QString &user1 = QString::null, const QString &user2 = QString::null, const QString &user3 = QString::null); A few examples below (from khexedit) The configuration dialog box: --------------------- COptionDialog::COptionDialog( const QString &title, QWidget *parent, char *name, bool modal ) :CDialogCore( TreeList, Help|Default|Apply|Ok|Cancel,Ok, parent, name, title, true, modal ) { setupLayoutPage(); setupCursorPage(); setupColorPage(); setupFontPage(); setupFilePage(); setupMiscPage(); } while the printer dialog is created as: --------------------------- CPrinterDialog::CPrinterDialog( const QString &title, QWidget *parent, char *name, bool modal ) :CDialogCore( Tabbed, Help|User2|User1|Cancel, User1, parent, name, title, false, modal, i18n("&Print"), i18n("Pre&view") ), setupDestinationPage(); setupOptionPage(); setupLayoutPage(); } On Mon, 30 Aug 1999, Mirko Sucker wrote: >Espen Sand wrote: > >> FYI: From My Struggle towards (even) better dialogs in KDE. >> >> I have been working this weekend on a dialog base class - DialogCore >> The reason for this is to make a class that more or less forces the user to >> follow certain rules when making dialogs. My goal is to get this class into >> kdeui so that I can use it in other (than khexedit) programs I have planned to >> "clean up". > >Hello Espen, >there is a class in kdeui that provides this stuff, it is DialogBase. Apart from >the three different layouts, it provides everything you are talking about. > >> *DialogCore provides three layouts (defined in constructor) >> +Plain (std dialog) >> +Tabbed (a tabbed dialog) >> +TreeList (treelist+pages as config window in khexedit, korganizer). The >> treelist is based on the QSplitter + QlistView. > >> *DialogCore defines an inner and outer margin. The outer is used by the >> DialogCore itself and and the user should use the "innerMagin()" only. >> (I hope DialogCore can read these margins from a central KDE object later). > >Instead of this, in DialogBase the user creates a widget that is child of the >dialog: >--- >DialogBase dialog; >QMultiLineEdit line(&dialog); >dialog.setMainWidget(&line); >if(!dialog.exec()) ... >--- >This is everything needed to create a dialog to enter a multi line text. The user >does not have to take care about inner and outer margins (that, BTW, arew there, >too). >I would be happy if you manage to add the three different styles to DialogBase, >instead of adding another class that implements the same stuff once again. >Greetings, >--Mirko. > >> ... I have begun making a general "about dialog" core class, AboutCore, that will >> be > >> able to create the "About KDE dialog" as well as my current "About khexedit" and >> more. The AboutCore is sublassed from the "DialogCore". I can >> already make the "About KDE dialog" using this class. I will try to implement >> all features from the (nice :-) "KAboutDialog" by Mirko Sucker. > >But remember that KAboutDialog is not THE About Dialog for KDE, it is meant for >application about dialogs. >Greetings, >--Mirko. > >-- >Denn der Mensch liebt und ehrt den Menschen, solange er ihn >nicht zu beurteilen vermag, und die Sehnsucht ist ein Erzeugnis >mangelhafter Erkenntnis. (Thomas Mann) -- Espen Sand