X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2Fqt4%2FGuiDocument.cpp;h=71eff5b92c4de5481598a5698cfeff0c97e8e8c4;hb=425d092204118ea6c24c28e85fdf03fcf2bb51a4;hp=36e47a514555946eeb2cb1358a9d402a43649580;hpb=df329341aa9c39d11e3e751e12abb5e0e63c2949;p=lyx.git diff --git a/src/frontends/qt4/GuiDocument.cpp b/src/frontends/qt4/GuiDocument.cpp index 36e47a5145..71eff5b92c 100644 --- a/src/frontends/qt4/GuiDocument.cpp +++ b/src/frontends/qt4/GuiDocument.cpp @@ -303,9 +303,9 @@ private: return dynamic_cast(selectedModel); } /// keeps a list of the modules the text class provides - std::list provided_modules_; + list provided_modules_; /// similarly... - std::list excluded_modules_; + list excluded_modules_; /// GuiDocument const * container_; }; @@ -434,26 +434,26 @@ void ModuleSelectionManager::updateDelPB() // required module. There would be more flexible ways to proceed, // but that would be a lot more complicated, and the logic here is // already complicated. (That's why I've left the debugging code.) - // lyxerr << "Testing " << thisMod << std::endl; + // lyxerr << "Testing " << thisMod << endl; bool foundone = false; for (int j = 0; j < curRow; ++j) { string const mod = getSelectedModel()->getIDString(j); - // lyxerr << "In loop: Testing " << mod << std::endl; + // lyxerr << "In loop: Testing " << mod << endl; // do we satisfy the require? if (find(reqs.begin(), reqs.end(), mod) != reqs.end()) { - // lyxerr << mod << " does the trick." << std::endl; + // lyxerr << mod << " does the trick." << endl; foundone = true; break; } } // did we find a module to satisfy the require? if (!foundone) { - // lyxerr << "No matching module found." << std::endl; + // lyxerr << "No matching module found." << endl; deletePB->setEnabled(false); return; } } - // lyxerr << "All's well that ends well." << std::endl; + // lyxerr << "All's well that ends well." << endl; deletePB->setEnabled(true); } @@ -617,6 +617,27 @@ GuiDocument::GuiDocument(GuiView & lv) bc().addCheckedLineEdit(textLayoutModule->indentLE); bc().addCheckedLineEdit(textLayoutModule->skipLE); + // master/child handling + masterChildModule = new UiWidget; + + connect(masterChildModule->childrenTW, SIGNAL(itemDoubleClicked(QTreeWidgetItem *, int)), + this, SLOT(includeonlyClicked(QTreeWidgetItem *, int))); + connect(masterChildModule->includeonlyRB, SIGNAL(toggled(bool)), + masterChildModule->childrenTW, SLOT(setEnabled(bool))); + connect(masterChildModule->includeonlyRB, SIGNAL(toggled(bool)), + masterChildModule->maintainAuxCB, SLOT(setEnabled(bool))); + connect(masterChildModule->includeallRB, SIGNAL(clicked()), + this, SLOT(change_adaptor())); + connect(masterChildModule->includeonlyRB, SIGNAL(clicked()), + this, SLOT(change_adaptor())); + connect(masterChildModule->maintainAuxCB, SIGNAL(clicked()), + this, SLOT(change_adaptor())); + masterChildModule->childrenTW->setColumnCount(2); + masterChildModule->childrenTW->headerItem()->setText(0, qt_("Child Document")); + masterChildModule->childrenTW->headerItem()->setText(1, qt_("Include to Output")); + masterChildModule->childrenTW->resizeColumnToContents(1); + masterChildModule->childrenTW->resizeColumnToContents(2); + // output outputModule = new UiWidget; @@ -1065,6 +1086,7 @@ GuiDocument::GuiDocument(GuiView & lv) qt_("Input listings parameters below. Enter ? for a list of parameters.")); docPS->addPanel(latexModule, qt_("Document Class")); + docPS->addPanel(masterChildModule, qt_("Child Documents")); docPS->addPanel(modulesModule, qt_("Modules")); docPS->addPanel(fontModule, qt_("Fonts")); docPS->addPanel(textLayoutModule, qt_("Text Layout")); @@ -1115,6 +1137,26 @@ void GuiDocument::change_adaptor() } +void GuiDocument::includeonlyClicked(QTreeWidgetItem * item, int) +{ + if (item == 0) + return; + + string child = fromqstr(item->text(0)); + if (child.empty()) + return; + + if (std::find(includeonlys_.begin(), + includeonlys_.end(), child) != includeonlys_.end()) + includeonlys_.remove(child); + else + includeonlys_.push_back(child); + + updateIncludeonlys(); + changed(); +} + + QString GuiDocument::validateListingsParameters() { // use a cache here to avoid repeated validation @@ -1533,7 +1575,8 @@ void GuiDocument::browseMaster() QString file = browseRelFile(old, docpath, title, filter, false, qt_("Documents|#o#O"), toqstr(lyxrc.document_path)); - latexModule->childDocLE->setText(file); + if (!file.isEmpty()) + latexModule->childDocLE->setText(file); } @@ -1804,6 +1847,15 @@ void GuiDocument::updateDefaultFormat() } +bool GuiDocument::isChildIncluded(string const & child) +{ + if (includeonlys_.empty()) + return false; + return (std::find(includeonlys_.begin(), + includeonlys_.end(), child) != includeonlys_.end()); +} + + void GuiDocument::applyView() { // preamble @@ -2042,6 +2094,17 @@ void GuiDocument::applyView() else bp_.master = string(); + // Master/Child + bp_.clearIncludedChildren(); + if (masterChildModule->includeonlyRB->isChecked()) { + list::const_iterator it = includeonlys_.begin(); + for (; it != includeonlys_.end() ; ++it) { + bp_.addIncludedChildren(*it); + } + } + bp_.maintain_unincluded_children = + masterChildModule->maintainAuxCB->isChecked(); + // Float Placement bp_.float_placement = floatModule->get(); @@ -2421,6 +2484,23 @@ void GuiDocument::paramsToDialog() latexModule->childDocGB->setChecked(false); } + // Master/Child + std::vector children = buffer().getChildren(false); + if (children.empty()) { + masterChildModule->childrenTW->clear(); + includeonlys_.clear(); + docPS->showPanel(qt_("Child Documents"), false); + if (docPS->isCurrentPanel(qt_("Child Documents"))) + docPS->setCurrentPanel(qt_("Document Class")); + } else { + docPS->showPanel(qt_("Child Documents"), true); + masterChildModule->setEnabled(true); + includeonlys_ = bp_.getIncludedChildren(); + updateIncludeonlys(); + } + masterChildModule->maintainAuxCB->setChecked( + bp_.maintain_unincluded_children); + // Float Settings floatModule->set(bp_.float_placement); @@ -2648,6 +2728,54 @@ void GuiDocument::updateSelectedModules() } +void GuiDocument::updateIncludeonlys() +{ + masterChildModule->childrenTW->clear(); + QString const no = qt_("No"); + QString const yes = qt_("Yes"); + + if (includeonlys_.empty()) { + masterChildModule->includeallRB->setChecked(true); + masterChildModule->childrenTW->setEnabled(false); + masterChildModule->maintainAuxCB->setEnabled(false); + } else { + masterChildModule->includeonlyRB->setChecked(true); + masterChildModule->childrenTW->setEnabled(true); + masterChildModule->maintainAuxCB->setEnabled(true); + } + QTreeWidgetItem * item = 0; + std::vector children = buffer().getChildren(false); + vector::const_iterator it = children.begin(); + vector::const_iterator end = children.end(); + bool has_unincluded = false; + bool all_unincluded = true; + for (; it != end; ++it) { + item = new QTreeWidgetItem(masterChildModule->childrenTW); + // FIXME Unicode + string const name = + to_utf8(makeRelPath(from_utf8((*it)->fileName().absFilename()), + from_utf8(buffer().filePath()))); + item->setText(0, toqstr(name)); + item->setText(1, isChildIncluded(name) ? yes : no); + if (!isChildIncluded(name)) + has_unincluded = true; + else + all_unincluded = false; + } + // Both if all childs are included and if none is included + // is equal to "include all" (i.e., ommit \includeonly). + // Thus, reset the GUI. + if (!has_unincluded || all_unincluded) { + masterChildModule->includeallRB->setChecked(true); + masterChildModule->childrenTW->setEnabled(false); + includeonlys_.clear(); + } + // If all are included, we need to update again. + if (!has_unincluded) + updateIncludeonlys(); +} + + void GuiDocument::updateContents() { // Nothing to do here as the document settings is not cursor dependant.