Source Code (Use browser search to find items of interest.)

Class Index

kmix'KDockWidget (./kdemultimedia/kmix/docking.h:37)

class KDockWidget : public QWidget {

  Q_OBJECT

public:
  /// Creates a docking widget and allows passing of the name of
  /// the docking icon. You must either pass a valid icon or 0.
  /// Passing 0, you can paint anything you like on the docking widget
  /// by overrdiding tjhe paint event.
  KDockWidget(const QString& dockIcon, const char *name=0);
  /// Overloaded constructor. Only differs from the previous constructor
  /// in that you can pass the icon as a QPixmap
  KDockWidget(const QPixmap& dockPixmap, const char *name=0);
  /// Deletes the docking widget. Please note that the widget undocks from
  /// the panel automatically.
  virtual ~KDockWidget();
  virtual void setMainWindow(KTMainWindow *ktmw);
  /** Checks, if application is in "docked" state. Returns true, if yes.
    It has still to be defined what the exact semantics are: Complete
    application docked, a single window docked, or is this application
    dependent?!? */
  virtual bool isDocked() const;
  //  void savePosition();
  virtual void setPixmap(const QString& dockPixmapName);
  virtual void setPixmap(const QPixmap& dockPixmap);

public slots:
  /// Dock this widget - this means to show this widget on the docking area
  virtual void dock();
  /// Undock this widget - this means to remove this widget from the docking area
  virtual void undock();
  /// A MousePressEvent for the left button. The default implementation shows and
  /// hides the main window set via setMainWindow().
  virtual void mousePressLeftEvent(QMouseEvent *e);
  /// A MousePressEvent for the right button. The default implementation pops up
  /// a menu.
  virtual void mousePressRightEvent(QMouseEvent *e);
  virtual void toggle_window_state();


protected:
  /// The paint event normally repaints the icon by calling paintIcon().
  /// If you do not want to show an icon, but draw some grapics, you
  /// must derive from QDockWidget and override this function.
  void paintEvent(QPaintEvent *e);
  /// Paint the icon.
  virtual void paintIcon();
  virtual void setShowHideText(); 
  virtual void baseInit();

private slots:
  void mousePressEvent(QMouseEvent *e);


signals:
  void quit_clicked();

protected slots:
  void emit_quit();

protected:
  bool		docked;
  int		pos_x;
  int		pos_y;
  int		showHidePopmenuEntry;
  KTMainWindow	*ktmw;
  QPopupMenu	*popup_m;
  QPixmap	pm_dockPixmap;
 };

kmix'KDockWidget::KDockWidget() (./kdemultimedia/kmix/docking.cpp:32)

KDockWidget::KDockWidget(const QString& dockPixmapName, const char* name)
  : QWidget(0, name, 0)
{
  baseInit();
  setPixmap(dockPixmapName);
}

// --- Constructor ---

kmix'KDockWidget::KDockWidget() (./kdemultimedia/kmix/docking.cpp:40)

KDockWidget::KDockWidget(const QPixmap& dockPixmap, const char* name)
  : QWidget(0, name, 0)
{
  baseInit();
  setPixmap(dockPixmap);
}

// --- set a new dock Pixmap by filename ---

kmix'KDockWidget::setPixmap() (./kdemultimedia/kmix/docking.cpp:48)

void KDockWidget::setPixmap(const QString& dockPixmapName)
{
  setPixmap(BarIcon(dockPixmapName));
}


// --- set a new dock Pixmap by giving a QPixmap ---

kmix'KDockWidget::setPixmap() (./kdemultimedia/kmix/docking.cpp:55)

void KDockWidget::setPixmap(const QPixmap& dockPixmap)
{
  this->pm_dockPixmap = dockPixmap;
}



kmix'KDockWidget::baseInit() (./kdemultimedia/kmix/docking.cpp:61)

void KDockWidget::baseInit() {
  // initialize some basic variables
  docked = false;
  pos_x = pos_y = 0;
  ktmw = 0;
  showHidePopmenuEntry = -1;	// invalid

  // Create standard popup menu for right mouse button
  popup_m = new QPopupMenu();

  // Insert standard item "Quit" into context menu of docking area
  popup_m->insertItem(i18n("Quit"),
		      this, SLOT(emit_quit()));
}


// --- Destructor ---

kmix'KDockWidget::~KDockWidget() (./kdemultimedia/kmix/docking.cpp:78)

KDockWidget::~KDockWidget()
{
  delete popup_m;
}


// --- Dock on Panel ---

kmix'KDockWidget::dock() (./kdemultimedia/kmix/docking.cpp:85)

void KDockWidget::dock()
{
  if (!docked) {
    // Tell the Panel, this widget wants a place on the docking area
    KWM::setDockWindow (this->winId());

    // that's all the space there is !!! SHOULD BE REWORKED (ask kpanel maintainer) !!!
    this->setFixedSize(24, 24);

    // finally show the docking widget on the docking area
    show();
    docked = true;
  }
}


// --- Undock from Panel ---

kmix'KDockWidget::undock() (./kdemultimedia/kmix/docking.cpp:102)

void KDockWidget::undock()
{
  if (docked) {
    // The widget's window has to be destroyed in order to undock from the
    // panel. Simply using hide() is not enough.
    this->destroy(true, true);

    // recreate docking widget for further dockings
    this->create(0, true, false);
    docked = false;
  }
}


// --- check whether dock widget is in "docked" state ---

kmix'KDockWidget::isDocked() (./kdemultimedia/kmix/docking.cpp:117)

bool KDockWidget::isDocked() const
{
  return docked;
}



kmix'KDockWidget::setMainWindow() (./kdemultimedia/kmix/docking.cpp:123)

void KDockWidget::setMainWindow(KTMainWindow *ktmw)
{
  this->ktmw = ktmw;

  if ( ktmw == 0 ) {
    if ( showHidePopmenuEntry != -1 ) {
      // Remove menu entry from menu of docking area
      popup_m->removeItem(showHidePopmenuEntry);
    }
    showHidePopmenuEntry = -1;
  }
  else {
    // Insert the standard show/hide item into context menu of docking area
    showHidePopmenuEntry = popup_m->insertItem("",
                           this, SLOT(toggle_window_state()) );
  }
}




kmix'KDockWidget::paintEvent() (./kdemultimedia/kmix/docking.cpp:143)

void KDockWidget::paintEvent (QPaintEvent* )
{
  paintIcon();
}


kmix'KDockWidget::paintIcon() (./kdemultimedia/kmix/docking.cpp:148)

void KDockWidget::paintIcon ()
{
  if (!pm_dockPixmap.isNull())
    bitBlt(this, 0, 0, &pm_dockPixmap);
}



kmix'KDockWidget::mousePressEvent() (./kdemultimedia/kmix/docking.cpp:155)

void KDockWidget::mousePressEvent(QMouseEvent *e)
{
  // open/close connect-window on left mouse button 
  if ( e->button() == LeftButton ) {
    mousePressLeftEvent(e);
  }

  // open popup menu on right mouse button
  if ( e->button() == RightButton ) {
    mousePressRightEvent(e);
  }
}


kmix'KDockWidget::mousePressLeftEvent() (./kdemultimedia/kmix/docking.cpp:168)

void KDockWidget::mousePressLeftEvent(QMouseEvent *)
{
  toggle_window_state();
}

kmix'KDockWidget::mousePressRightEvent() (./kdemultimedia/kmix/docking.cpp:172)

void KDockWidget::mousePressRightEvent(QMouseEvent *e)
{
    int x = e->x() + this->x();
    int y = e->y() + this->y();

    setShowHideText();
    popup_m->popup(QPoint(x, y));
    popup_m->exec();
}



kmix'KDockWidget::setShowHideText() (./kdemultimedia/kmix/docking.cpp:183)

void KDockWidget::setShowHideText()
{
  if (showHidePopmenuEntry != -1) {
    // set the show/hide Text appropiate
    QString text;
    if ( ktmw->isVisible() )
      text = i18n("&Minimize");
    else
      text = i18n("&Restore");
    popup_m->changeItem(text, showHidePopmenuEntry);
  }
}


kmix'KDockWidget::toggle_window_state() (./kdemultimedia/kmix/docking.cpp:196)

void KDockWidget::toggle_window_state()
{
  if(ktmw != 0) {
    if (ktmw->isVisible()) {
      // --- Toplevel was visible => hide it
      debug("Hide\n");
      ktmw->hide();
      //ktmw->recreate(0, 0, QPoint(x(), y()), FALSE);
      //kapp->setTopWidget( this );  // !!! esken: Is this line needed?
    }
    else {
      // --- Toplevel was invisible => show it again
      debug("Show\n");
      ktmw->show();
      //KWM::activate(ktmw->winId());
    }
  }
}




kmix'KDockWidget::emit_quit() (./kdemultimedia/kmix/docking.cpp:217)

void KDockWidget::emit_quit()
{
  emit quit_clicked();
}