/* * This file is part of the KDE Libraries * Copyright (C) 1999-2001 Mirko Boehm (mirko@kde.org) and * Espen Sand (espen@kde.org) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public License * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. * */ /* * This file declares a class for creating "About ..." dialogs * in a general way. It provides geometry management and some * options to connect for, like emailing the author or maintainer. */ #ifndef _TDEABOUTDIALOG_H_ #define _TDEABOUTDIALOG_H_ #include #include class TQFrame; class TQLabel; class TQVBoxLayout; class TQTabWidget; class KURLLabel; class TDEAboutContainer; class TDEAboutContainerBase; class TDEAboutWidgetPrivate; class TDEAboutContainerPrivate; /** * TDEAboutContainer can be used to make a application specific AboutDialog. */ class TDEUI_EXPORT TDEAboutContainer : public TQFrame { Q_OBJECT public: TDEAboutContainer( TQWidget *parent=0, const char *name=0, int margin=0, int spacing=0, int childAlignment = AlignCenter, int innerAlignment = AlignCenter ); void addWidget( TQWidget *widget ); void addPerson( const TQString &name, const TQString &email, const TQString &url, const TQString &task, bool showHeader = false, bool showframe = false, bool showBold = false ); void addTitle( const TQString &title, int alignment=AlignLeft, bool showframe = false, bool showBold = false ); void addImage( const TQString &fileName, int alignment=AlignLeft ); virtual TQSize sizeHint( void ) const; virtual TQSize minimumSizeHint( void ) const; protected: virtual void childEvent( TQChildEvent *e ); signals: void urlClick( const TQString &url ); void mailClick( const TQString &name, const TQString &address ); private: TQVBoxLayout *mVbox; int mAlignment; TDEAboutContainerPrivate* const d; }; class TDEAboutContributorPrivate; /** * Used internally by TDEAboutWidget * @internal */ class TDEUI_EXPORT TDEAboutContributor : public TQFrame { Q_OBJECT public: TDEAboutContributor( TQWidget *parent=0, const char *name=0, const TQString &username=TQString::null, const TQString &email=TQString::null, const TQString &url=TQString::null, const TQString &work=TQString::null, bool showHeader=false, bool showFrame=true, bool showBold=false ); void setName( const TQString &text, const TQString &header=TQString::null, bool update = true ); void setEmail( const TQString &text, const TQString &header=TQString::null, bool update = true ); void setURL( const TQString &text, const TQString &header=TQString::null, bool update = true ); void setWork( const TQString &text, const TQString &header=TQString::null, bool update = true ); TQString getName( void ) const; TQString getEmail( void ) const; TQString getURL( void ) const; TQString getWork( void ) const; virtual TQSize sizeHint( void ) const; protected: virtual void fontChange( const TQFont &oldFont ); protected slots: void urlClickedSlot( const TQString& ); void emailClickedSlot( const TQString& emailaddress ); private: void updateLayout( void ); signals: void sendEmail(const TQString& name, const TQString& email); void openURL(const TQString& url); private: TQLabel *mLabel[4]; TQLabel *mText[4]; bool mShowHeader; bool mShowBold; TDEAboutContributorPrivate* const d; virtual void setName(const char *_name) { TQFrame::setName(_name); } }; /** * TDEAboutWidget is the main widget for TDEAboutDialog. * * It has a minimum size set. */ class TDEUI_EXPORT TDEAboutWidget : public TQWidget { Q_OBJECT public: /** * The Qt constructor. */ TDEAboutWidget(TQWidget* parent=0, const char* name=0 ); /** * Adjust the minimum size (after setting the properties of the image and * the labels. */ void adjust(); /** * Sets the image as the application logo. */ void setLogo(const TQPixmap&); /** * Sets the author's name and email address. */ void setAuthor(const TQString& name, const TQString& email, const TQString& url, const TQString& work); /** * Sets the maintainers name and email address. */ void setMaintainer(const TQString& name, const TQString& email, const TQString& url, const TQString& work); /** * Shows this person as one of the major contributors. */ void addContributor(const TQString& name, const TQString& email, const TQString& url, const TQString& work); /** * Sets the text describing the version. */ void setVersion(const TQString& name); // ------------------------------------------------------------------------- protected slots: /** * Catches the signals from the contributors elements. */ void sendEmailSlot(const TQString& name, const TQString& email); /** * Catches the clicked URLs. */ void openURLSlot(const TQString& url); // ------------------------------------------------------------------------- signals: /** * An email address has been selected by the user. */ void sendEmail(const TQString& name, const TQString& email); /** * An URL has been clicked. */ void openURL(const TQString& url); // ------------------------------------------------------------------------- protected: // events: /** * The resize event. */ void resizeEvent(TQResizeEvent*); /** * The label showing the program version. */ TQLabel *version; /** * The label showing the text "Other contributors:". */ TQLabel *cont; /** * The frame showing the logo. */ TQLabel *logo; /** * The application developer. */ TDEAboutContributor *author; /** * The application maintainer. */ TDEAboutContributor *maintainer; /** * Show the maintainer? */ bool showMaintainer; /** * A set of people who contributed to the application. */ TQPtrList contributors; // ######################################################################### // private: TDEAboutWidgetPrivate* const d; }; class TDEAboutDialogPrivate; /** * A KDialogBase with predefined main widget. * * As a KDialogBase it uses your application wide settings * for KDialogBase * objects (base frame tiles, main frame tiles etc). * To use it, simply create a TDEAboutDialog object, set all (or some) of its * properties and show it. Do not derive it to create your own about dialog * until you need some cool features that are unsupported and you have * contacted me to add them. * * The dialog can be created using two different constructors. The * difference between these constructors is the available components that * can be used to build the contents of the dialog. The first (Constructor I) * provides a number of easy to use methods. Basically it allows you * to add the components of choice, and the components are placed in a * predefined layout. You do not have to plan the layout. Everything is * taken care of. * * The second constructor (Constructor II) works in quite the same manner * as the first, but you have better control on where the components * are postioned in the layout and you have access to an extended number * of components you can install such as titles, product information, * a tabbed pages (where you can display rich text with url links) and * a person (developer) information field. The "About KDE" dialog box is * created with Constructor II. * * For the derived features, see the basic class KDialogBase. * @author Mirko Boehm (mirko@kde.org) and Espen Sand (espensa@online.no) * @see KDialogBase */ class TDEUI_EXPORT TDEAboutDialog : public KDialogBase { Q_OBJECT public: /** * Layout formats. **/ enum LayoutType { AbtPlain = 0x0001, AbtTabbed = 0x0002, AbtTitle = 0x0004, AbtImageLeft = 0x0008, AbtImageRight = 0x0010, AbtImageOnly = 0x0020, AbtProduct = 0x0040, AbtKDEStandard = AbtTabbed|AbtTitle|AbtImageLeft, AbtAppStandard = AbtTabbed|AbtTitle|AbtProduct, AbtImageAndTitle = AbtPlain|AbtTitle|AbtImageOnly }; public: /** * The standard Qt constructor (Constructor I). * * Add components with the following methods: * setLogo(), setAuthor(), setMaintainer(), * addContributor(), or setVersion(). * The dialog will be laid out automatically. */ TDEAboutDialog( TQWidget *parent=0, const char *name=0, bool modal=true ); /** * The extended constructor. (Constructor II). * * Add components with the methods: * setTitle(), setImage(), setImageBackgroundColor(), * setImageFrame(), setProduct(), addTextPage(), * addContainerPage(), addContainer(), or addPage(). * * @param dialogLayout Use a mask of LayoutType flags. * @param caption The dialog caption. The text you specify is prepended * by i18n("About"). * @param buttonMask Specifies what buttons will be visible. * @param defaultButton Specifies what button will be marked as the default. * @param parent Parent of the dialog. * @param name Dialog name (for internal use only) * @param modal Sets dialog modality. If false, the rest of the * program interface (other dialogs, for example) is accessible while * the dialog is open. * @param separator If true, a separator line is drawn between the action * buttons an the main widget. * @param user1 User button1 text. * @param user2 User button2 text. * @param user3 User button3 text. * */ TDEAboutDialog( int dialogLayout, const TQString &caption, int buttonMask, ButtonCode defaultButton, TQWidget *parent=0, const char *name=0, bool modal=false, bool separator = false, const TQString &user1 = TQString::null, const TQString &user2 = TQString::null, const TQString &user3 = TQString::null ); /** * Adjusts the dialog. * * You can call this method after you have set up all * the contents but it is not required. It is done automatically when * show() is executed. */ void adjust(); /** * Makes a modeless (modal = false in constructor) dialog visible. * * If you reimplement this method make sure you run it * in the new method (e.g., show()). Reimplemented * from KDialogBase. */ virtual void show( void ); /** * Makes a modeless (modal = false in constructor) dialog visible. * * If you reimplmement this method make sure you run it * in the new method (i.e., show( parent )). * * @param centerParent Center the dialog with respect to this widget. */ virtual void show( TQWidget *centerParent ); /** * (Constructor II only) * Sets a title (not caption) in the uppermost area of the dialog. * * @param title Title string. */ void setTitle( const TQString &title ); /** * (Constructor II only) * Define an image to be shown in the dialog. The position is dependent * on the @p dialogLayout in the constructor * * @param fileName Path to image file. */ void setImage( const TQString &fileName ); /** * (Constructor II only) * Define the program logo to be shown in the dialog. Use this to override the * default program logo. For example, use this function if the * TDEAboutDialog is for a panel applet and you want to override the * appletproxy logo with your own pixmap. * * @param fileName Path to file containing logo data in a format that * can be loaded by TQPixmap. * * @since 3.3 */ void setIcon( const TQString &fileName ) KDE_DEPRECATED; // KDE4: remove /** * Overloaded version of setProgramLogo(const TQPixmap& pixmap). * * @since 3.4 */ void setProgramLogo( const TQString &fileName ); /** * (Constructor II only) * Define the program logo to be shown in the dialog. Use this to override the * default program logo. For example, use this function if the * TDEAboutDialog is for a panel applet and you want to override the * appletproxy logo with your own pixmap. * * @param pixmap The logo pixmap. * * @since 3.4 */ void setProgramLogo( const TQPixmap &pixmap ); /** * (Constructor II only) * The image has a minimum size, but is centered within an area if the * dialog box is enlarged by the user. You set the background color * of the area with this method. * * @param color Background color. */ void setImageBackgroundColor( const TQColor &color ); /** * (Constructor II only) * Enables or disables a frame around the image. The frame is, by default, * enabled in the constructor * * @param state A value of @p true enables the frame */ void setImageFrame( bool state ); /** * (Constructor II only) * Prints the application name, KDE version, author, a copyright sign * and a year string. To the left of the text the standard application * icon is displayed. * * @param appName The application name. * @param version Application version. * @param author One or more authors. * @param year A string telling when the application was made. */ void setProduct( const TQString &appName, const TQString &version, const TQString &author, const TQString &year ); /** * (Constructor II only) * Adds a text page to a tab box. The text can be regular text or * rich text. The rich text can contain URLs and mail links. * * @param title Tab name. * @param text The text to display. * @param richText Set this to @p true if 'text' is rich text. * @param numLines The text area height will be adjusted so that this * is the minimum number of lines of text that are visible. * @return The frame that contains the page. */ TQFrame *addTextPage( const TQString &title, const TQString &text, bool richText=false, int numLines=10 ); /** * (Constructor II only) * Adds a license page to a tab box. * * @param title Tab name. * @param text The text to display. * @param numLines The text area height will be adjusted so that this * is the minimum number of lines of text that are visible. * @return The frame that contains the page. */ TQFrame *addLicensePage( const TQString &title, const TQString &text, int numLines=10 ); /** * (Constructor II only) * Adds a container to a tab box. You can add text and images to a * container. * * @param title Tab name. * @param childAlignment Specifies how the children of the container are * aligned with respect to the container. * @param innerAlignment Specifies how the children are aligned with * respect to each other. * @return The new container. */ TDEAboutContainer *addContainerPage( const TQString &title, int childAlignment = AlignCenter, int innerAlignment = AlignCenter ); /** * (Constructor II only) * Adds a container inside a TQScrollView to a tab box. You can add text * and images to a container. * * @param title Tab name. * @param childAlignment Specifies how the children of the container are * aligned with respect to the container. * @param innerAlignment Specifies how the children are aligned with * respect to each other. * @return The new container. */ TDEAboutContainer *addScrolledContainerPage( const TQString &title, int childAlignment = AlignCenter, int innerAlignment = AlignCenter ); /** * (Constructor II only) * Adds a container. You can add text and images to a container. * * @param childAlignment Specifies how the children of the container are * aligned with respect to the container. * @param innerAlignment Specifies how the children are aligned with * respect to each other. * @return The new container. */ TDEAboutContainer *addContainer( int childAlignment, int innerAlignment ); /** * (Constructor II only) * Adds an empty page to a tab box. * * @param title Tab name * @return The new page. */ TQFrame *addPage( const TQString &title ); /** * (Constructor I only) * Sets the image as the application logo. */ void setLogo(const TQPixmap&); /** * (Constructor I only) * Sets the author's name and email address. */ void setAuthor(const TQString& name, const TQString& email, const TQString& url, const TQString& work); /** * (Constructor I only) * Sets the maintainer's name and email address. */ void setMaintainer(const TQString& name, const TQString& email, const TQString& url, const TQString& work); /** * (Constructor I only) * Show this person as one of the major contributors. */ void addContributor(const TQString& name, const TQString& email, const TQString& url, const TQString& work); /** * (Constructor I only) * Sets the text describing the version. */ void setVersion(const TQString& name); /** * Create a modal dialog with an image in the upper area with a * URL link below. */ static void imageURL( TQWidget *parent, const TQString &caption, const TQString &path, const TQColor &imageColor, const TQString &url ); signals: /** * Send an email to this person. * * The application must provide the * functionality. */ void sendEmail(const TQString& name, const TQString& email); /** * Open the selected URL. */ void openURL(const TQString& url); // ---------------------------------------------------------------------------- protected: /** * The main widget (Constructor I) */ TDEAboutWidget * about; /** * The main widget (Constructor II) */ TDEAboutContainerBase *mContainerBase; // ------------------------------------------------------------------------- protected slots: /** * Connected to widget->sendEmail. */ void sendEmailSlot(const TQString& name, const TQString& email); /** * Open this URL. */ void openURLSlot(const TQString& url); /** * (Constructor II only) * Tells the position of the mouse cursor when the left mouse button * is pressed above an image */ virtual void mouseTrackSlot( int mode, const TQMouseEvent *e ); // ######################################################################### protected: virtual void virtual_hook( int id, void* data ); private: TDEAboutDialogPrivate* const d; }; #endif // defined TDEABOUTDIALOG_H