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

Class Index

kdelibs'KDockSplitter (./kdelibs/kdeui/kdockwidget_private.h:97)

class KDockSplitter : public QWidget
{
  Q_OBJECT
public:
  KDockSplitter(QWidget *parent= 0, const char *name= 0, Orientation orient= Vertical, int pos= 50);
  virtual ~KDockSplitter(){};

  void activate(QWidget *c0, QWidget *c1 = 0L);
  void deactivate();

  int separatorPos();
  void setSeparatorPos(int pos, bool do_resize = true);

  virtual bool eventFilter(QObject *, QEvent *);
  virtual bool event( QEvent * );

  QWidget* getFirst(){ return child0; }
  QWidget* getLast(){ return child1; }
  QWidget* getAnother( QWidget* );
  void updateName();

protected:
  int checkValue( int );
  virtual void resizeEvent(QResizeEvent *);

private:
  void setupMinMaxSize();

  QWidget *child0, *child1;
  Orientation orientation;
  bool initialised;
  QFrame* divider;
  int xpos;
};

/**
 * A mini-button usually placed in the dockpanel.
 *
 * @author Max Judin.
 * @version $Id: kdockwidget_private.h,v 1.2 2000/04/01 22:28:24 judinmax Exp $
*/

kdelibs'KDockSplitter::KDockSplitter() (./kdelibs/kdeui/kdockwidget_private.cpp:196)

KDockSplitter::KDockSplitter(QWidget *parent, const char *name, Orientation orient, int pos)
: QWidget(parent, name)
{
  divider = 0L;
  child0 = 0L;
  child1 = 0L;
  orientation = orient;
  setSeparatorPos( pos, false );
  initialised = false;
}


kdelibs'KDockSplitter::activate() (./kdelibs/kdeui/kdockwidget_private.cpp:207)

void KDockSplitter::activate(QWidget *c0, QWidget *c1)
{
  if ( c0 ) child0 = c0;
  if ( c1 ) child1 = c1;

  setupMinMaxSize();

  if (divider) delete divider;
  divider = new QFrame(this, "pannerdivider");
  divider->setFrameStyle(QFrame::Panel | QFrame::Raised);
  divider->setLineWidth(1);
  divider->raise();

  if (orientation == Horizontal)
    divider->setCursor(QCursor(sizeVerCursor));
  else
    divider->setCursor(QCursor(sizeHorCursor));

  divider->installEventFilter(this);

  initialised= true;

  updateName();

  divider->show();
  resizeEvent(0);
}


kdelibs'KDockSplitter::setupMinMaxSize() (./kdelibs/kdeui/kdockwidget_private.cpp:235)

void KDockSplitter::setupMinMaxSize()
{
  // Set the minimum and maximum sizes
  int minx, maxx, miny, maxy;
  if (orientation == Horizontal) {
    miny = child0->minimumSize().height() + child1->minimumSize().height()+4;
    maxy = child0->maximumSize().height() + child1->maximumSize().height()+4;
    minx = (child0->minimumSize().width() > child1->minimumSize().width()) ? child0->minimumSize().width() : child1->minimumSize().width();
    maxx = (child0->maximumSize().width() > child1->maximumSize().width()) ? child0->maximumSize().width() : child1->maximumSize().width();

    miny = (miny > 4) ? miny : 4;
    maxy = (maxy < 2000) ? maxy : 2000;
    minx = (minx > 2) ? minx : 2;
    maxx = (maxx < 2000) ? maxx : 2000;
  } else {
    minx = child0->minimumSize().width() + child1->minimumSize().width()+4;
    maxx = child0->maximumSize().width() + child1->maximumSize().width()+4;
    miny = (child0->minimumSize().height() > child1->minimumSize().height()) ? child0->minimumSize().height() : child1->minimumSize().height();
    maxy = (child0->maximumSize().height() > child1->maximumSize().height()) ? child0->maximumSize().height() : child1->maximumSize().height();

    minx = (minx > 4) ? minx : 4;
    maxx = (maxx < 2000) ? maxx : 2000;
    miny = (miny > 2) ? miny : 2;
    maxy = (maxy < 2000) ? maxy : 2000;
  }
	setMinimumSize(minx, miny);
	setMaximumSize(maxx, maxy);
}


kdelibs'KDockSplitter::deactivate() (./kdelibs/kdeui/kdockwidget_private.cpp:264)

void KDockSplitter::deactivate()
{
  if (divider) delete divider;
  divider = 0L;
  initialised= false;
}


kdelibs'KDockSplitter::setSeparatorPos() (./kdelibs/kdeui/kdockwidget_private.cpp:271)

void KDockSplitter::setSeparatorPos(int pos, bool do_resize)
{
  xpos = pos;
  if (do_resize)
    resizeEvent(0);
}


kdelibs'KDockSplitter::separatorPos() (./kdelibs/kdeui/kdockwidget_private.cpp:278)

int KDockSplitter::separatorPos()
{
  return xpos;
}


kdelibs'KDockSplitter::resizeEvent() (./kdelibs/kdeui/kdockwidget_private.cpp:283)

void KDockSplitter::resizeEvent(QResizeEvent*)
{
  if (initialised){
    int position = checkValue( (orientation == Vertical ? width() : height()) * xpos/100 );
    if (orientation == Horizontal){
      child0->setGeometry(0, 0, width(), position);
      child1->setGeometry(0, position+4, width(), height()-position-4);
      divider->setGeometry(0, position, width(), 4);
    } else {
      child0->setGeometry(0, 0, position, height());
      child1->setGeometry(position+4, 0, width()-position-4, height());
      divider->setGeometry(position, 0, 4, height());
    }
  }
}


kdelibs'KDockSplitter::checkValue() (./kdelibs/kdeui/kdockwidget_private.cpp:299)

int KDockSplitter::checkValue( int position )
{
  if (initialised){
    if (orientation == Vertical){
      if (position < (child0->minimumSize().width()))
        position = child0->minimumSize().width();
      if ((width()-4-position) < (child1->minimumSize().width()))
        position = width() - (child1->minimumSize().width()) -4;
    } else {
      if (position < (child0->minimumSize().height()))
        position = (child0->minimumSize().height());
      if ((height()-4-position) < (child1->minimumSize().height()))
        position = height() - (child1->minimumSize().height()) -4;
    }
  }
   
  if (position < 0) position = 0;

  if ((orientation == Vertical) && (position > width()))
    position = width();
  if ((orientation == Horizontal) && (position > height()))
    position = height();

  return position;
}


kdelibs'KDockSplitter::eventFilter() (./kdelibs/kdeui/kdockwidget_private.cpp:325)

bool KDockSplitter::eventFilter(QObject *o, QEvent *e)
{
  QMouseEvent *mev;
  bool handled = false;

  switch (e->type()) {
    case QEvent::MouseMove:
      mev= (QMouseEvent*)e;
      child0->setUpdatesEnabled(false);
      child1->setUpdatesEnabled(false);
      if (orientation == Horizontal) {
        int position = checkValue( divider->mapToParent(mev->pos()).y() );
	divider->move( 0, position );
      } else {
        int position = checkValue( mapFromGlobal(QCursor::pos()).x() );
	divider->move( position, 0 );
      }
      handled= true;
      break;
    case QEvent::MouseButtonRelease:
      child0->setUpdatesEnabled(true);
      child1->setUpdatesEnabled(true);
      mev= (QMouseEvent*)e;
      if (orientation == Horizontal){
        xpos = 100* checkValue( divider->mapToParent(mev->pos()).y() ) / height();
        resizeEvent(0);
        divider->repaint(true);
      } else {
        xpos = 100* checkValue( divider->mapToParent(mev->pos()).x() ) / width();
        resizeEvent(0);
        divider->repaint(true);
      }
      handled= true;
      break;
    default:
      break;
  }
  return (handled) ? true : QWidget::eventFilter( o, e );
}


kdelibs'KDockSplitter::event() (./kdelibs/kdeui/kdockwidget_private.cpp:365)

bool KDockSplitter::event( QEvent* e )
{
  if ( e->type() == QEvent::LayoutHint ){
    // change children min/max size
    setupMinMaxSize();
    setSeparatorPos(xpos);
  }
  return QWidget::event(e);
}


kdelibs'KDockSplitter::getAnother() (./kdelibs/kdeui/kdockwidget_private.cpp:375)

QWidget* KDockSplitter::getAnother( QWidget* w )
{
  return ( w == child0 ) ? child1 : child0;
}


kdelibs'KDockSplitter::updateName() (./kdelibs/kdeui/kdockwidget_private.cpp:380)

void KDockSplitter::updateName()
{
  if ( !initialised ) return;

  QString new_name = QString( child0->name() ) + "," + child1->name();
  parentWidget()->setName( new_name.latin1() );
  parentWidget()->setCaption( child0->caption() + "," + child1->caption() );
  parentWidget()->repaint( false );

  ((KDockWidget*)parentWidget())->firstName = child0->name();
  ((KDockWidget*)parentWidget())->lastName = child1->name();
  ((KDockWidget*)parentWidget())->splitterOrientation = orientation;

  QWidget* p = parentWidget()->parentWidget();
  if ( p != 0L && p->inherits("KDockSplitter" ) )
    ((KDockSplitter*)p)->updateName();
}

/*************************************************************************/