#include "GuiToc.h"
#include "qt_helpers.h"
-#include "support/filetools.h"
-#include "support/lstrings.h"
-#include "debug.h"
+#include "support/debug.h"
#include <QHeaderView>
-#include <QPushButton>
-#include <QTreeWidgetItem>
+#include <QTimer>
#include <vector>
-#include <string>
-#include <stack>
-
-using std::endl;
-using std::pair;
-using std::stack;
-using std::vector;
-using std::string;
+using namespace std;
namespace lyx {
-
-using support::FileName;
-using support::libFileSearch;
-
namespace frontend {
TocWidget::TocWidget(GuiToc & form, QWidget * parent)
: QWidget(parent), depth_(0), form_(form)
{
setupUi(this);
- setWindowTitle(qt_("Outline"));
- connect(&form_, SIGNAL(modelReset()), SLOT(updateGui()));
-
- FileName icon_path = libFileSearch("images", "promote.png");
- moveOutTB->setIcon(QIcon(toqstr(icon_path.absFilename())));
- icon_path = libFileSearch("images", "demote.png");
- moveInTB->setIcon(QIcon(toqstr(icon_path.absFilename())));
- icon_path = libFileSearch("images", "up.png");
- moveUpTB->setIcon(QIcon(toqstr(icon_path.absFilename())));
- icon_path = libFileSearch("images", "down.png");
- moveDownTB->setIcon(QIcon(toqstr(icon_path.absFilename())));
- icon_path = libFileSearch("images", "reload.png");
- updateTB->setIcon(QIcon(toqstr(icon_path.absFilename())));
+ moveOutTB->setIcon(QIcon(":/images/promote.png"));
+ moveInTB->setIcon(QIcon(":/images/demote.png"));
+ moveUpTB->setIcon(QIcon(":/images/up.png"));
+ moveDownTB->setIcon(QIcon(":/images/down.png"));
+ updateTB->setIcon(QIcon(":/images/reload.png"));
// avoid flickering
tocTV->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
void TocWidget::selectionChanged(const QModelIndex & current,
const QModelIndex & /*previous*/)
{
- LYXERR(Debug::GUI)
- << "selectionChanged index " << current.row()
- << ", " << current.column()
- << endl;
+ LYXERR(Debug::GUI, "selectionChanged index " << current.row()
+ << ", " << current.column());
form_.goTo(typeCO->currentIndex(), current);
}
void TocWidget::select(QModelIndex const & index)
{
if (!index.isValid()) {
- LYXERR(Debug::GUI)
- << "TocWidget::select(): QModelIndex is invalid!" << endl;
+ LYXERR(Debug::GUI, "TocWidget::select(): QModelIndex is invalid!");
return;
}
void TocWidget::updateView()
{
- LYXERR(Debug::GUI) << "In TocWidget::updateView()" << endl;
+ LYXERR(Debug::GUI, "In TocWidget::updateView()");
select(form_.currentIndex(typeCO->currentIndex()));
}
-void TocWidget::updateGui()
+void TocWidget::updateGui(int selected_type)
{
- vector<docstring> const & type_names = form_.typeNames();
- if (type_names.empty()) {
+ QStringList const & type_names = form_.typeNames();
+ if (type_names.isEmpty()) {
enableControls(false);
typeCO->clear();
tocTV->setModel(new QStandardItemModel);
return;
}
- QString current_text = typeCO->currentText();
- //lyxerr << "current_text " << fromqstr(current_text) << endl;
+ QString const current_text = typeCO->currentText();
typeCO->blockSignals(true);
typeCO->clear();
- int current_type = -1;
- for (size_t i = 0; i != type_names.size(); ++i) {
- QString item = toqstr(type_names[i]);
- typeCO->addItem(item);
- if (item == current_text)
- current_type = i;
+ for (int i = 0; i != type_names.size(); ++i)
+ typeCO->addItem(type_names[i]);
+ if (selected_type != -1)
+ typeCO->setCurrentIndex(selected_type);
+ else {
+ int const new_index = typeCO->findText(current_text);
+ if (new_index != -1)
+ typeCO->setCurrentIndex(new_index);
}
- if (current_type != -1)
- typeCO->setCurrentIndex(current_type);
- else
- typeCO->setCurrentIndex(form_.selectedType());
+
typeCO->blockSignals(false);
setTocModel(typeCO->currentIndex());
+
+ // setTocModel produce QTreeView reset and setting depth again
+ // is needed. That must be done after all Qt updates are processed.
+ QTimer::singleShot(0, this, SLOT(setTreeDepth()));
}
depthSL->setValue(depth_);
}
- LYXERR(Debug::GUI) << "In TocWidget::updateGui()" << endl;
+ LYXERR(Debug::GUI, "In TocWidget::updateGui()");
select(form_.currentIndex(typeCO->currentIndex()));
if (toc_model) {
- LYXERR(Debug::GUI)
- << "tocModel()->rowCount "
+ LYXERR(Debug::GUI, "tocModel()->rowCount "
<< toc_model->rowCount()
<< "\nform_->tocModel()->columnCount "
- << toc_model->columnCount()
- << endl;
+ << toc_model->columnCount());
}
}
void TocWidget::disconnectSelectionModel()
{
disconnect(tocTV->selectionModel(),
- SIGNAL(currentChanged(const QModelIndex &,
- const QModelIndex &)),
- this,
- SLOT(selectionChanged(const QModelIndex &,
- const QModelIndex &)));
+ SIGNAL(currentChanged(QModelIndex, QModelIndex)),
+ this, SLOT(selectionChanged(QModelIndex, QModelIndex)));
}
} // namespace frontend