All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines
Signals | Public Member Functions
QGpGuiTools::ExpandTabWidget Class Reference

Brief description of class still missing. More...

#include <ExpandTabWidget.h>

List of all members.

Signals

void sizeChanged ()

Public Member Functions

void addWidget (QString title, QWidget *w)
 ExpandTabWidget (QWidget *parent=0)
bool isDocked (QWidget *w)
uint key () const
void restoreState (const QByteArray &state)
QByteArray saveState () const
void setTitlePrefix (QString p)
void takeWidget (QWidget *w)
QList< QWidget * > takeWidgets ()
 ~ExpandTabWidget ()

Detailed Description

Brief description of class still missing.

Full description of class still missing


Constructor & Destructor Documentation

Description of constructor still missing

References TRACE.

    : QWidget(parent)
{
  TRACE;
  _vboxLayout=new QVBoxLayout(this);
  _vboxLayout->setSpacing(0);
  _vboxLayout->setContentsMargins(0, 0, 0 ,0);
}
{
}

Member Function Documentation

void QGpGuiTools::ExpandTabWidget::addWidget ( QString  title,
QWidget *  w 
)

References QGpGuiTools::ExpandTabTitle::setContent(), QGpGuiTools::ExpandTabTitle::setTitle(), and TRACE.

Referenced by QGpGuiTools::PropertyCategory::setEditor().

{
  TRACE;
  ExpandTabTitle * t=new ExpandTabTitle(this);
  t->setTitle(title);
  w->layout()->setContentsMargins(9, 9, 9 ,9);
  t->setContent(w);
  t->setObjectName(w->objectName());
  connect(t, SIGNAL(moveUp()), this, SLOT(moveWidgetUp()));
  connect(t, SIGNAL(moveDown()), this, SLOT(moveWidgetDown()));
  connect(t, SIGNAL(dock()), this, SLOT(dockWidget()));
  connect(t, SIGNAL(addActions(QMenu *)), this, SLOT(addContextActions(QMenu *)));
  connect(t, SIGNAL(resize(int)), this, SLOT(resize(int)));
  _vboxLayout->addWidget(t);
  _vboxLayout->addWidget(w); // docked by default
}

References QGpGuiTools::ExpandTabTitle::docked().

Referenced by QGpGuiTools::PropertyCategory::removeTab().

{
  int index;
  ExpandTabTitle * t=find(w, index);
  return t ? t->docked() : false;
}

References QGpGuiTools::ExpandTabTitle::content(), QGpGuiTools::ExpandTabTitle::docked(), and DinverCore::qHash().

{
  uint k=0;
  int n=_vboxLayout->count();
  for(int i=0; i<n;i++) {
    ExpandTabTitle * t=qobject_cast<ExpandTabTitle *>(_vboxLayout->itemAt(i)->widget());
    if(t) {
      QString name=t->content()->objectName();
      k+=qHash(name);
      if(t->docked()) i++;
    }
  }
  return k;
}
void QGpGuiTools::ExpandTabWidget::restoreState ( const QByteArray &  state)

References QGpGuiTools::ExpandTabTitle::content(), QGpGuiTools::Settings::getRect(), QGpGuiTools::ExpandTabTitle::setDocked(), QGpGuiTools::ExpandTabTitle::setExpanded(), QGpGuiTools::ExpandTabTitle::title, and TRACE.

{
  TRACE;
  QDataStream s(const_cast<QByteArray *>(&state), QIODevice::ReadOnly);
  int n;
  s >> n;
  if(n<=0) return;
  QList<ExpandTabTitle *> wList=findChildren<ExpandTabTitle *>();
  // Tranfer to a Hash table to map from ObjectName to object pointers
  QHash<QString, ExpandTabTitle *> name2ptr;
  for(QList<ExpandTabTitle *>::iterator it=wList.begin(); it!=wList.end(); ++it) {
    name2ptr.insert((*it)->objectName(), *it);
  }
  // Reset layout to allow re-ordering of widgets
  delete _vboxLayout;
  _vboxLayout=new QVBoxLayout(this);
  _vboxLayout->setSpacing(0);
  _vboxLayout->setContentsMargins(0, 0, 0 ,0);
  for(int i=0; i<n; i++ ) {
    bool expanded, docked;
    int h;
    QString name;
    s >> expanded;
    s >> docked;
    s >> h;
    s >> name;
    if(name2ptr.contains(name)) {
      ExpandTabTitle * t=name2ptr[name];
      _vboxLayout->addWidget(t);
      t->setExpanded(expanded);
      QWidget * w=t->content();
      if(docked) {
        _vboxLayout->addWidget(t->content());
        if(! (w->windowFlags() & Qt::Widget)) w->setWindowFlags(Qt::Widget);
        w->setMinimumSize(w->minimumSize().width(), h);
        t->setDocked(true);
      } else {
        QWidget * w=t->content();
        w->setWindowTitle(_titlePrefix + t->title());
        w->setParent(QApplication::activeWindow());
        if(! (w->windowFlags() & Qt::Tool)) w->setWindowFlags(Qt::Tool);
        Settings::getRect(t->content(), objectName()+t->content()->objectName());
        w->resize(w->width(), h);
        t->setDocked(false);
        t->setExpanded(true);
      }
      name2ptr.remove(name);
    }
  }
  // In case of error in widget list, there may be some remaining widgets, we add them at the end
  for(QHash<QString, ExpandTabTitle *>::iterator it=name2ptr.begin();it!=name2ptr.end(); ++it) {
    ExpandTabTitle * t=it.value();
    _vboxLayout->addWidget(t);
    _vboxLayout->addWidget(t->content());
    t->setExpanded(true);
    t->setDocked(true);
  }
}

References QGpGuiTools::ExpandTabTitle::content(), QGpGuiTools::ExpandTabTitle::docked(), QGpGuiTools::ExpandTabTitle::expanded, QGpGuiTools::Settings::setRect(), and TRACE.

{
  TRACE;
  QByteArray state;
  QDataStream s(&state, QIODevice::WriteOnly);
  int n=_vboxLayout->count();
  s << n;
  for(int i=0;i<n;i++) {
    ExpandTabTitle * t=qobject_cast<ExpandTabTitle *>(_vboxLayout->itemAt(i)->widget());
    if(t) {
      s << t->expanded();
      s << t->docked();
      s << t->content()->height();
      s << t->objectName();
      if(t->docked()) {
        i++;
      } else {
        Settings::setRect(t->content(), objectName()+t->content()->objectName());
      }
    }
  }
  return state;
}
void QGpGuiTools::ExpandTabWidget::setTitlePrefix ( QString  p) [inline]

References QGpGuiTools::ExpandTabTitle::content(), QGpGuiTools::ExpandTabTitle::docked(), and TRACE.

Referenced by QGpGuiTools::PropertyCategory::removeTab().

{
  TRACE;
  int index;
  ExpandTabTitle * t=find(w, index);
  if(t) {
    if(t->docked())
      delete _vboxLayout->takeAt(index+1); // Content: QLayoutItem deleted, widget remains
    delete _vboxLayout->takeAt(index);     // Title item, widget still there
    t->content()->setParent(0);
    delete t;
  }
}

References QGpGuiTools::ExpandTabTitle::content(), QGpGuiTools::ExpandTabTitle::docked(), and TRACE.

{
  TRACE;
  QList<QWidget *> wList;
  while(!_vboxLayout->isEmpty()) {
    ExpandTabTitle * t=static_cast<ExpandTabTitle *>(_vboxLayout->itemAt(0)->widget());
    if(t->docked())
      delete _vboxLayout->takeAt(1);   // Content: QLayoutItem deleted, widget remains
    delete _vboxLayout->takeAt(0);     // Title item, widget still there
    wList.append(t->content());
    t->content()->setParent(0);
    delete t;
  }
  return wList;
}

The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines