19#include "stencilbarbutton.h"
21#include <kiconloader.h>
22#include <kstringhandler.h>
23#include <tqapplication.h>
29#include "tqdrawutil.h"
33DragBarButton::DragBarButton( const TQString& text, TQWidget* parent, const char* name )
34: TQPushButton(text,parent,name)
41 m_orientation = TQt::Vertical;
43 const char* stencil_xpm[] = {
75 setPixmap(stencil_xpm);
77 const TQColorGroup& g = colorGroup();
78 TQColor c = g.buttonText();
82 c.rgb( &cr, &cg, &cb );
83 line.sprintf( ". c #%02X%02X%02X",cr,cg,cb);
85 const char* close_xpm[] = {
88 ( const char*)line.ascii(),
97 m_pClosePix = new TQPixmap(close_xpm);
99 TQToolTip::add( this, text);
102DragBarButton::~DragBarButton()
107 kdDebug(43000) << "DragBarButton - AHHHHHH I'M DYING!" << endl;
110void DragBarButton::drawButton( TQPainter* paint )
114 if(m_orientation == TQt::Vertical) {
115 pixSize = TQSize(width(), height());
117 pixSize = TQSize(height(), width());
120 TQPixmap pix(pixSize.width(), pixSize.height());
121 pix.fill(eraseColor());
122 TQPainter pixPainter(&pix);
124 const TQColorGroup& g = colorGroup();
125 style().drawControl( TQStyle::CE_PushButton, &pixPainter, this, TQRect(0, 0, pixSize.width(), pixSize.height()), colorGroup() );
132 pw = m_pIcon->width();
133 style().drawItem( &pixPainter, TQRect( m, 0, pw, pixSize.height() ),
134 AlignLeft | AlignVCenter,
135 colorGroup(), isEnabled(),
136 m_pIcon, TQString(), -1,
140 if ( !text().isEmpty() ) {
141 TQFontMetrics fm = fontMetrics();
142 TQSize sz = fm.size( ShowPrefix, text() );
144 int x = m + pw + (tw!=0 && pw!=0 ?m:0);
145 TQString t = KStringHandler::rPixelSqueeze(text(), fm, pixSize.width() - (x + m + 22));
147 style().drawItem( &pixPainter, TQRect( x, 0, tw, pixSize.height() ),
148 AlignLeft | AlignVCenter|ShowPrefix,
149 colorGroup(), isEnabled(),
155 TQPoint p1(pixSize.width() - 10, 0);
156 TQPoint p2(pixSize.width() - 10, pixSize.height());
157 qDrawShadeLine( &pixPainter, p1, p2, g, true, 0, 1 );
161 qDrawShadeLine( &pixPainter, p1, p2, g, true, 0, 1 );
164 int z = m_bClose ? 1:0;
165 pixPainter.drawPixmap(pixSize.width() - 20 + z, (pixSize.height() - m_pClosePix->height()) / 2 + z, *m_pClosePix);
168 if(m_orientation == TQt::Vertical) {
169 paint->drawPixmap(0, 0, pix);
172 paint->drawPixmap(1 - pixSize.width(), 0, pix);
176void DragBarButton::setIcon( const TQString& name )
178 m_pIcon = new TQPixmap(BarIcon(name));
181void DragBarButton::setPixmap( const TQPixmap& pixmap )
183 m_pIcon = new TQPixmap(pixmap);
186TQSize DragBarButton::sizeHint() const
195 if ( !text().isEmpty() ) {
196 TQFontMetrics fm = fontMetrics();
197 TQSize sz = fm.size( ShowPrefix, text() );
203 pw = m_pIcon->width();
204 ph = m_pIcon->height();
207 int h = TQMAX(ph,th)+2*m;
208 int w = m + pw + (tw!=0 && pw!=0 ?m:0) + tw + m + 22;
212 if(m_orientation == TQt::Vertical) {
213 size = TQSize(w, h).expandedTo(TQApplication::globalStrut());
215 size = TQSize(h, w).expandedTo(TQApplication::globalStrut());
221void DragBarButton::mousePressEvent( TQMouseEvent* ev )
226 if(m_orientation == TQt::Vertical) {
227 closeRect.setRect(width() - 20, 0, m_pClosePix->width(), height());
229 closeRect.setRect(0, 20 - m_pClosePix->width(), width(), m_pClosePix->width());
232 if ( closeRect.contains(ev->pos())) {
239 m_ppoint = ev->pos();
242void DragBarButton::mouseReleaseEvent( TQMouseEvent* ev )
249 if(m_orientation == TQt::Vertical) {
250 closeRect.setRect(width() - 20, 0, m_pClosePix->width(), height());
252 closeRect.setRect(0, 20 - m_pClosePix->width(), width(), m_pClosePix->width());
255 if ( closeRect.contains(ev->pos()))
257 kdDebug(43000) << "DragBarButton::mouseReleaseEvent() - Emitting closeRequest" << endl;
258 emit closeRequired( this);
272void DragBarButton::mouseMoveEvent( TQMouseEvent* ev )
275 TQPoint p = m_ppoint;
277 if (p.manhattanLength() > 2 && !m_bDragged ) {
284void DragBarButton::enterEvent( TQEvent* ev )
286 TQPushButton::enterEvent(ev);
291void DragBarButton::leaveEvent( TQEvent* ev )
293 TQPushButton::leaveEvent(ev);
298void DragBarButton::setOrientation(TQt::Orientation orientation)
300 m_orientation = orientation;
302 if(m_orientation == TQt::Vertical) {
303 setSizePolicy(TQSizePolicy::Minimum, TQSizePolicy::Fixed);
305 setSizePolicy(TQSizePolicy::Fixed, TQSizePolicy::Minimum);
309#include "stencilbarbutton.moc"
|