summaryrefslogtreecommitdiffstats
path: root/kdeui/kpushbutton.h
blob: b0664c8072802d1870368ae5a89243cfa0d3f6e1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
/* This file is part of the KDE libraries
    Copyright (C) 2000 Carsten Pfeiffer <pfeiffer@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.
*/

#ifndef KPUSHBUTTON_H
#define KPUSHBUTTON_H

#include <tqpoint.h>
#include <tqpushbutton.h>
#include <kguiitem.h>
#include <kstdguiitem.h> 

class TQDragObject;
/**
 * This is nothing but a TQPushButton with drag-support and KGuiItem support. You have to call
 * setDragEnabled( true ) and override the virtual method
 * dragObject() to specify the TQDragObject to be used.
 *
 * @short A TQPushButton with drag-support and KGuiItem support
 * @author Carsten Pfeiffer <pfeiffer@kde.org>
 */
class KDEUI_EXPORT KPushButton : public TQPushButton
{
    Q_OBJECT
    Q_PROPERTY(int stdItem READ guiItm WRITE setGuiItm )
    Q_PROPERTY(bool isDragEnabled READ isDragEnabled WRITE setDragEnabled)

public:

    /**
     * Default constructor.
     */
    KPushButton( TQWidget *parent, const char *name=0 );

    /**
     * Constructor, that sets the button-text to @p text
     */
    KPushButton( const TQString &text, TQWidget *parent, const char *name=0);

    /**
     * Constructor, that sets an icon and the button-text to @p text
     */
    KPushButton( const TQIconSet &icon, const TQString &text,
		     TQWidget *parent, const char *name=0 );

    /**
     * Constructor that takes a KGuiItem for the text, the icon, the tooltip
     * and the what's this help
     */
    KPushButton( const KGuiItem &item, TQWidget *parent, const char *name = 0 );

    /**
     * Destructs the button.
     */
    ~KPushButton();

    /**
     * Enables/disables drag-support. Default is disabled.
     */
    void setDragEnabled( bool enable );

    /**
     * @returns if drag support is enabled or not.
     */
    bool isDragEnabled() const { return m_dragEnabled; }

    /**
     * Sets the KGuiItem for this button.
     */
    void setGuiItem( const KGuiItem& item );

    /** 
    * Sets the standard KGuiItem for this button.
    * @since 3.4
    */
    void setGuiItem( KStdGuiItem::StdItem item );

    /**
    * Reads the standard KGuiItem for this button. 
    * @since 3.4
    */
    KStdGuiItem::StdItem guiItem() const;

    // Hack for Qt designer
    void setGuiItm(int itm ) { setGuiItem( (KStdGuiItem::StdItem)itm );}
    int guiItm() const { return (int)guiItem(); }

    /**
     * Sets the Icon Set for this button. It also takes into account hte
     * KGlobalSettings::showIconsOnPushButtons() setting.
     */
    void setIconSet( const TQIconSet &iconSet );

    /**
    * Sets the text of the button
    */
    void setText( const TQString &text );

protected:
    /**
     * Reimplement this and return the TQDragObject that should be used
     * for the drag.
     * Default implementation returns 0L, so that no drag is initiated.
     */
    virtual TQDragObject * dragObject();

    /**
     * Reimplemented to add drag-support
     */
    virtual void mousePressEvent( TQMouseEvent * );
    /**
     * Reimplemented to add drag-support
     */
    virtual void mouseMoveEvent( TQMouseEvent * );

    /**
     * Starts a drag (dragCopy() by default) using dragObject()
     */
    virtual void startDrag();

private:
    bool m_dragEnabled;
    TQPoint startPos;

private slots:
    void slotSettingsChanged( int category );

private:
    /**
     * Internal.
     * Initialize the KPushButton instance
     */
    void init( const KGuiItem &item );

    void readSettings();
    static bool s_useIcons;

protected:
    virtual void virtual_hook( int id, void* data );
private:
    class KPushButtonPrivate;
    KPushButtonPrivate *d;

};

#endif // KPUSHBUTTON_H