3 * This file is part of LyX, the document processor.
4 * Licence details can be found in the file COPYING.
8 * Full author contact details are available in file CREDITS.
13 #include "panelstack.h"
15 #include "qt_helpers.h"
17 #include <QStackedWidget>
18 #include <QTreeWidget>
19 #include <QHBoxLayout>
20 #include <QHeaderView>
22 #include <boost/assert.hpp>
32 PanelStack::PanelStack(QWidget * parent)
35 list_ = new QTreeWidget(this);
36 stack_ = new QStackedWidget(this);
38 list_->setColumnCount(1);
39 QStringList HeaderLabels; HeaderLabels << QString("Category");
40 list_->setHeaderLabels(HeaderLabels);
42 connect(list_, SIGNAL(currentItemChanged (QTreeWidgetItem*, QTreeWidgetItem*)),
43 this, SLOT(switchPanel(QTreeWidgetItem *, QTreeWidgetItem*)));
45 QHBoxLayout * layout = new QHBoxLayout(this);
46 layout->addWidget(list_, 0);
47 layout->addWidget(stack_, 1);
51 void PanelStack::addCategory(docstring const & n, docstring const & parent)
53 QTreeWidgetItem * item;
56 lyx::ucs4_to_qstring(n, name);
58 cout << "addCategory n= " << lyx::to_utf8(n) << " parent= " << endl;
61 item = new QTreeWidgetItem(list_);
62 item->setText(0, name);
65 PanelMap::iterator it = panel_map_.find(parent);
66 //BOOST_ASSERT(it != panel_map_.end());
67 if (it == panel_map_.end()) {
69 it = panel_map_.find(parent);
71 BOOST_ASSERT(it != panel_map_.end());
73 item = new QTreeWidgetItem(it->second);
74 item->setText(0, name);
79 list_->setMinimumWidth(list_->header()->sectionSize(0) + list_->indentation());
83 void PanelStack::addPanel(QWidget * panel, docstring const & name, docstring const & parent)
85 addCategory(name, parent);
86 QTreeWidgetItem * item = panel_map_.find(name)->second;
88 widget_map_[item] = panel;
89 stack_->addWidget(panel);
90 stack_->setMinimumSize(panel->minimumSize());
94 void PanelStack::setCurrentPanel(docstring const & name)
96 PanelMap::const_iterator cit = panel_map_.find(name);
97 BOOST_ASSERT(cit != panel_map_.end());
100 if (list_->currentItem() == cit->second)
101 switchPanel(cit->second);
103 list_->setCurrentItem(cit->second);
107 void PanelStack::switchPanel(QTreeWidgetItem * item,
108 QTreeWidgetItem * /*previous*/)
110 WidgetMap::const_iterator cit = widget_map_.find(item);
111 if (cit == widget_map_.end())
114 stack_->setCurrentWidget(cit->second);
118 QSize PanelStack::sizeHint() const
120 return QSize(list_->width() + stack_->width(),
121 qMax(list_->height(), stack_->height()));
124 #include "panelstack_moc.cpp"