Show
Ignore:
Timestamp:
01/24/08 21:40:25 (10 months ago)
Author:
eugene
Message:

Major docking fix.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • branches/qt-gui_qt4/src/dockicons/dockiconwidget.cpp

    r5837 r6058  
    2323#include "config.h" 
    2424 
     25#include <QCloseEvent> 
    2526#include <QBitmap> 
     27#include <QMenu> 
    2628#include <QPainter> 
     29 
     30#include "helpers/support.h" 
    2731 
    2832#include "dockicon.h" 
     
    3034using namespace LicqQtGui; 
    3135 
    32 DockIconWidget::DockIconWidget(QPixmap* pix, DockIcon* parent) 
    33   : QWidget(parent), 
    34     vis(NULL) 
     36DockIconWidget::DockIconWidget(QMenu* menu) 
     37  : QWidget(), 
     38    myMenu(menu), 
     39    myFace(NULL) 
    3540{ 
    36   setObjectName("DockIconWidget"); 
    37   Set(pix); 
    38 } 
    39  
    40 void DockIconWidget::Set(QPixmap* pix) 
    41 { 
    42   delete vis; 
    43   vis = new QPixmap(*pix); 
    44   resize(vis->size()); 
    45   setMask(vis->mask()); 
    46   repaint(); 
     41  resize(64, 64); 
     42  setAttribute(Qt::WA_NoSystemBackground, true); 
     43  setAttribute(Qt::WA_AlwaysShowToolTips, true); 
     44  Support::setWidgetProps(this, "DockIconWidget"); 
     45  myHandler = Support::dockWindow(winId()); 
     46  show(); 
    4747} 
    4848 
    4949DockIconWidget::~DockIconWidget() 
    5050{ 
    51   delete vis; 
     51  Support::undockWindow(winId(), myHandler); 
     52  delete myFace; 
     53} 
     54 
     55void DockIconWidget::setFace(QPixmap* newFace, bool updateMask) 
     56{ 
     57  if (newFace == NULL || newFace->isNull()) 
     58    return; 
     59 
     60  delete myFace; 
     61  myFace = new QPixmap(*newFace); 
     62  resize(myFace->size()); 
     63  if (updateMask) 
     64    setMask(myFace->mask()); 
     65  update(); 
     66} 
     67 
     68QPixmap* DockIconWidget::face() 
     69{ 
     70  if (myFace == NULL) 
     71    return NULL; 
     72 
     73  return new QPixmap(*myFace); 
     74} 
     75 
     76void DockIconWidget::closeEvent(QCloseEvent* event) 
     77{ 
     78  event->ignore(); 
    5279} 
    5380 
    5481void DockIconWidget::mousePressEvent(QMouseEvent* event) 
    5582{ 
    56   dynamic_cast<DockIcon*>(parent())->mousePressEvent(event); 
     83  switch (event->button()) 
     84  { 
     85    case Qt::LeftButton: 
     86      emit clicked(); 
     87      break; 
     88 
     89    case Qt::MidButton: 
     90      emit middleClicked(); 
     91      break; 
     92  
     93    case Qt::RightButton: 
     94      myMenu->popup(event->globalPos()); 
     95      break; 
     96 
     97    default: 
     98      break; 
     99  } 
    57100} 
    58101 
    59 void DockIconWidget::drawIcon(QPainter& painter) 
     102void DockIconWidget::paintEvent(QPaintEvent* event) 
    60103{ 
    61   if (!vis) 
     104  if (myFace == NULL) 
    62105    return; 
    63   painter.drawPixmap(0, 0, *vis); 
     106 
     107  event->ignore(); 
     108  QPainter painter(this); 
     109  painter.drawPixmap(0, 0, *myFace); 
    64110} 
    65  
    66 void DockIconWidget::paintEvent(QPaintEvent* /* event */) 
    67 { 
    68   QPainter painter(this); 
    69   drawIcon(painter); 
    70   painter.end(); 
    71 }