30 #include <QMouseEvent>
31 #include <QDragEnterEvent>
34 #include <KGlobalSettings>
36 #include <KIconLoader>
39 using namespace KontactInterface;
42 namespace KontactInterface {
43 class SummaryMimeData :
public QMimeData
46 virtual bool hasFormat(
const QString &format )
const
48 if ( format ==
"application/x-kontact-summary" ) {
58 class Summary::Private
61 KStatusBar *mStatusBar;
62 QPoint mDragStartPoint;
67 : QWidget( parent ), d( new Private )
69 setFont( KGlobalSettings::generalFont() );
70 setAcceptDrops(
true );
85 setStyleSheet(
"KHBox {"
89 "background: palette(window);"
90 "color: palette(windowtext);"
92 "KHBox > QLabel { font: bold larger; } " );
94 KHBox *hbox =
new KHBox( parent );
96 QLabel *label =
new QLabel( hbox );
97 label->setPixmap( KIconLoader::global()->loadIcon( iconname, KIconLoader::Toolbar ) );
99 label->setFixedSize( label->sizeHint() );
100 label->setAcceptDrops(
true );
102 label =
new QLabel( heading, hbox );
103 label->setAlignment( Qt::AlignLeft | Qt::AlignVCenter );
104 label->setIndent( KDialog::spacingHint() );
106 hbox->setMaximumHeight( hbox->minimumSizeHint().height() );
113 return QStringList();
125 void Summary::mousePressEvent( QMouseEvent *event )
127 d->mDragStartPoint =
event->pos();
129 QWidget::mousePressEvent( event );
132 void Summary::mouseMoveEvent( QMouseEvent *event )
134 if ( ( event->buttons() & Qt::LeftButton ) &&
135 ( event->pos() - d->mDragStartPoint ).manhattanLength() > 4 ) {
137 QDrag *drag =
new QDrag(
this );
138 drag->setMimeData(
new SummaryMimeData() );
139 drag->setObjectName(
"SummaryWidgetDrag" );
141 QPixmap pm = QPixmap::grabWidget(
this );
142 if ( pm.width() > 300 ) {
143 pm = QPixmap::fromImage(
144 pm.toImage().scaled( 300, 300, Qt::KeepAspectRatio, Qt::SmoothTransformation ) );
148 painter.begin( &pm );
149 painter.setPen( QPalette::AlternateBase );
150 painter.drawRect( 0, 0, pm.width(), pm.height() );
152 drag->setPixmap( pm );
153 drag->start( Qt::MoveAction );
155 QWidget::mouseMoveEvent( event );
159 void Summary::dragEnterEvent( QDragEnterEvent *event )
161 if ( event->mimeData()->hasFormat(
"application/x-kontact-summary" ) ) {
162 event->acceptProposedAction();
166 void Summary::dropEvent( QDropEvent *event )
168 int alignment = (
event->pos().y() < ( height() / 2 ) ? Qt::AlignTop : Qt::AlignBottom );