This commit splits the add() method in two methods add() and

addWithStatus(). It also replaces LyXView uses with BufferView as none of the LyXView feature were used.



git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@15181 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Abdelrazak Younes 2006-09-29 21:40:56 +00:00
parent 255345d4c6
commit 34694773c6
6 changed files with 83 additions and 85 deletions

View File

@ -19,6 +19,7 @@
#include "BranchList.h" #include "BranchList.h"
#include "buffer.h" #include "buffer.h"
#include "bufferlist.h"
#include "bufferparams.h" #include "bufferparams.h"
#include "CutAndPaste.h" #include "CutAndPaste.h"
#include "debug.h" #include "debug.h"
@ -37,7 +38,6 @@
#include "toc.h" #include "toc.h"
#include "frontends/Application.h" #include "frontends/Application.h"
#include "frontends/LyXView.h"
#include "support/filetools.h" #include "support/filetools.h"
#include "support/lstrings.h" #include "support/lstrings.h"
@ -156,18 +156,20 @@ docstring const MenuItem::binding() const
} }
Menu & Menu::add(MenuItem const & i, LyXView const * view) Menu & Menu::add(MenuItem const & i)
{ {
if (!view) {
items_.push_back(i); items_.push_back(i);
return *this; return *this;
} }
Menu & Menu::addWithStatusCheck(MenuItem const & i)
{
switch (i.kind()) { switch (i.kind()) {
case MenuItem::Command: { case MenuItem::Command: {
FuncStatus status = FuncStatus status =
view->getLyXFunc().getStatus(i.func()); theApp->lyxFunc().getStatus(i.func());
if (status.unknown() if (status.unknown()
|| (!status.enabled() && i.optional())) || (!status.enabled() && i.optional()))
break; break;
@ -428,7 +430,7 @@ string const limit_string_length(string const & str)
} }
void expandLastfiles(Menu & tomenu, LyXView const * view) void expandLastfiles(Menu & tomenu)
{ {
lyx::Session::LastFiles const & lf = LyX::cref().session().lastFiles(); lyx::Session::LastFiles const & lf = LyX::cref().session().lastFiles();
lyx::Session::LastFiles::const_iterator lfit = lf.begin(); lyx::Session::LastFiles::const_iterator lfit = lf.begin();
@ -439,19 +441,19 @@ void expandLastfiles(Menu & tomenu, LyXView const * view)
docstring const label = convert<docstring>(ii) + lyx::from_ascii(". ") docstring const label = convert<docstring>(ii) + lyx::from_ascii(". ")
+ makeDisplayPath((*lfit), 30) + makeDisplayPath((*lfit), 30)
+ char_type('|') + convert<docstring>(ii); + char_type('|') + convert<docstring>(ii);
tomenu.add(MenuItem(MenuItem::Command, label, FuncRequest(LFUN_FILE_OPEN, (*lfit))), view); tomenu.add(MenuItem(MenuItem::Command, label, FuncRequest(LFUN_FILE_OPEN, (*lfit))));
} }
} }
void expandDocuments(Menu & tomenu, LyXView const * view) void expandDocuments(Menu & tomenu)
{ {
typedef vector<string> Strings; typedef vector<string> Strings;
Strings const names = theApp->bufferList().getFileNames(); Strings const names = theApp->bufferList().getFileNames();
if (names.empty()) { if (names.empty()) {
tomenu.add(MenuItem(MenuItem::Command, _("No Documents Open!"), tomenu.add(MenuItem(MenuItem::Command, _("No Documents Open!"),
FuncRequest(LFUN_NOACTION)), view); FuncRequest(LFUN_NOACTION)));
return; return;
} }
@ -462,18 +464,17 @@ void expandDocuments(Menu & tomenu, LyXView const * view)
docstring label = makeDisplayPath(*docit, 20); docstring label = makeDisplayPath(*docit, 20);
if (ii < 10) if (ii < 10)
label = convert<docstring>(ii) + lyx::from_ascii(". ") + label + char_type('|') + convert<docstring>(ii); label = convert<docstring>(ii) + lyx::from_ascii(". ") + label + char_type('|') + convert<docstring>(ii);
tomenu.add(MenuItem(MenuItem::Command, label, FuncRequest(LFUN_BUFFER_SWITCH, *docit)), view); tomenu.add(MenuItem(MenuItem::Command, label, FuncRequest(LFUN_BUFFER_SWITCH, *docit)));
} }
} }
void expandFormats(MenuItem::Kind kind, Menu & tomenu, LyXView const * view) void expandFormats(MenuItem::Kind kind, Menu & tomenu, Buffer const * buf)
{ {
if (!view->buffer() && kind != MenuItem::ImportFormats) { if (!buf && kind != MenuItem::ImportFormats) {
tomenu.add(MenuItem(MenuItem::Command, tomenu.add(MenuItem(MenuItem::Command,
_("No Documents Open!"), _("No Documents Open!"),
FuncRequest(LFUN_NOACTION)), FuncRequest(LFUN_NOACTION)));
view);
return; return;
} }
@ -487,15 +488,15 @@ void expandFormats(MenuItem::Kind kind, Menu & tomenu, LyXView const * view)
action = LFUN_BUFFER_IMPORT; action = LFUN_BUFFER_IMPORT;
break; break;
case MenuItem::ViewFormats: case MenuItem::ViewFormats:
formats = Exporter::getExportableFormats(*view->buffer(), true); formats = Exporter::getExportableFormats(*buf, true);
action = LFUN_BUFFER_VIEW; action = LFUN_BUFFER_VIEW;
break; break;
case MenuItem::UpdateFormats: case MenuItem::UpdateFormats:
formats = Exporter::getExportableFormats(*view->buffer(), true); formats = Exporter::getExportableFormats(*buf, true);
action = LFUN_BUFFER_UPDATE; action = LFUN_BUFFER_UPDATE;
break; break;
default: default:
formats = Exporter::getExportableFormats(*view->buffer(), false); formats = Exporter::getExportableFormats(*buf, false);
action = LFUN_BUFFER_EXPORT; action = LFUN_BUFFER_EXPORT;
} }
sort(formats.begin(), formats.end(), compare_format()); sort(formats.begin(), formats.end(), compare_format());
@ -528,80 +529,78 @@ void expandFormats(MenuItem::Kind kind, Menu & tomenu, LyXView const * view)
if (!(*fit)->shortcut().empty()) if (!(*fit)->shortcut().empty())
label += char_type('|') + lyx::from_utf8((*fit)->shortcut()); label += char_type('|') + lyx::from_utf8((*fit)->shortcut());
if (buf)
tomenu.addWithStatusCheck(MenuItem(MenuItem::Command, label,
FuncRequest(action, (*fit)->name())));
else
tomenu.add(MenuItem(MenuItem::Command, label, tomenu.add(MenuItem(MenuItem::Command, label,
FuncRequest(action, (*fit)->name())), FuncRequest(action, (*fit)->name())));
view);
} }
} }
void expandFloatListInsert(Menu & tomenu, LyXView const * view) void expandFloatListInsert(Menu & tomenu, Buffer const * buf)
{ {
if (!view->buffer()) { if (!buf) {
tomenu.add(MenuItem(MenuItem::Command, tomenu.add(MenuItem(MenuItem::Command,
_("No Documents Open!"), _("No Documents Open!"),
FuncRequest(LFUN_NOACTION)), FuncRequest(LFUN_NOACTION)));
view);
return; return;
} }
FloatList const & floats = FloatList const & floats =
view->buffer()->params().getLyXTextClass().floats(); buf->params().getLyXTextClass().floats();
FloatList::const_iterator cit = floats.begin(); FloatList::const_iterator cit = floats.begin();
FloatList::const_iterator end = floats.end(); FloatList::const_iterator end = floats.end();
for (; cit != end; ++cit) { for (; cit != end; ++cit) {
tomenu.add(MenuItem(MenuItem::Command, tomenu.addWithStatusCheck(MenuItem(MenuItem::Command,
_(cit->second.listName()), _(cit->second.listName()),
FuncRequest(LFUN_FLOAT_LIST, FuncRequest(LFUN_FLOAT_LIST,
cit->second.type())), cit->second.type())));
view);
} }
} }
void expandFloatInsert(Menu & tomenu, LyXView const * view) void expandFloatInsert(Menu & tomenu, Buffer const * buf)
{ {
if (!view->buffer()) { if (!buf) {
tomenu.add(MenuItem(MenuItem::Command, tomenu.add(MenuItem(MenuItem::Command,
_("No Documents Open!"), _("No Documents Open!"),
FuncRequest(LFUN_NOACTION)), FuncRequest(LFUN_NOACTION)));
view);
return; return;
} }
FloatList const & floats = FloatList const & floats =
view->buffer()->params().getLyXTextClass().floats(); buf->params().getLyXTextClass().floats();
FloatList::const_iterator cit = floats.begin(); FloatList::const_iterator cit = floats.begin();
FloatList::const_iterator end = floats.end(); FloatList::const_iterator end = floats.end();
for (; cit != end; ++cit) { for (; cit != end; ++cit) {
// normal float // normal float
docstring const label = _(cit->second.name()); docstring const label = _(cit->second.name());
tomenu.add(MenuItem(MenuItem::Command, label, tomenu.addWithStatusCheck(MenuItem(MenuItem::Command, label,
FuncRequest(LFUN_FLOAT_INSERT, FuncRequest(LFUN_FLOAT_INSERT,
cit->second.type())), cit->second.type())));
view);
} }
} }
void expandCharStyleInsert(Menu & tomenu, LyXView const * view) void expandCharStyleInsert(Menu & tomenu, Buffer const * buf)
{ {
if (!view->buffer()) { if (!buf) {
tomenu.add(MenuItem(MenuItem::Command, tomenu.add(MenuItem(MenuItem::Command,
_("No Documents Open!"), _("No Documents Open!"),
FuncRequest(LFUN_NOACTION)), FuncRequest(LFUN_NOACTION)));
view);
return; return;
} }
CharStyles & charstyles = CharStyles & charstyles =
view->buffer()->params().getLyXTextClass().charstyles(); buf->params().getLyXTextClass().charstyles();
CharStyles::iterator cit = charstyles.begin(); CharStyles::iterator cit = charstyles.begin();
CharStyles::iterator end = charstyles.end(); CharStyles::iterator end = charstyles.end();
for (; cit != end; ++cit) { for (; cit != end; ++cit) {
docstring const label = lyx::from_utf8(cit->name); docstring const label = lyx::from_utf8(cit->name);
tomenu.add(MenuItem(MenuItem::Command, label, tomenu.addWithStatusCheck(MenuItem(MenuItem::Command, label,
FuncRequest(LFUN_CHARSTYLE_INSERT, FuncRequest(LFUN_CHARSTYLE_INSERT,
cit->name)), view); cit->name)));
} }
} }
@ -666,20 +665,17 @@ void expandToc2(Menu & tomenu,
} }
void expandToc(Menu & tomenu, LyXView const * view) void expandToc(Menu & tomenu, Buffer const * buf)
{ {
// To make things very cleanly, we would have to pass view to // To make things very cleanly, we would have to pass buf to
// all MenuItem constructors and to expandToc2. However, we // all MenuItem constructors and to expandToc2. However, we
// know that all the entries in a TOC will be have status_ == // know that all the entries in a TOC will be have status_ ==
// OK, so we avoid this unnecessary overhead (JMarc) // OK, so we avoid this unnecessary overhead (JMarc)
Buffer const * buf = view->buffer();
if (!buf) { if (!buf) {
tomenu.add(MenuItem(MenuItem::Command, tomenu.add(MenuItem(MenuItem::Command,
_("No Documents Open!"), _("No Documents Open!"),
FuncRequest(LFUN_NOACTION)), FuncRequest(LFUN_NOACTION)));
view);
return; return;
} }
@ -711,23 +707,22 @@ void expandToc(Menu & tomenu, LyXView const * view)
// Handle normal TOC // Handle normal TOC
cit = toc_list.find("TOC"); cit = toc_list.find("TOC");
if (cit == end) { if (cit == end) {
tomenu.add(MenuItem(MenuItem::Command, tomenu.addWithStatusCheck(MenuItem(MenuItem::Command,
_("No Table of contents"), _("No Table of contents"),
FuncRequest()), FuncRequest()));
view);
} else { } else {
expandToc2(tomenu, cit->second, 0, cit->second.size(), 0); expandToc2(tomenu, cit->second, 0, cit->second.size(), 0);
} }
} }
void expandPasteRecent(Menu & tomenu, LyXView const * view) void expandPasteRecent(Menu & tomenu, Buffer const * buf)
{ {
if (!view || !view->buffer()) if (!buf)
return; return;
vector<string> const sel = vector<string> const sel =
lyx::cap::availableSelections(*view->buffer()); lyx::cap::availableSelections(*buf);
vector<string>::const_iterator cit = sel.begin(); vector<string>::const_iterator cit = sel.begin();
vector<string>::const_iterator end = sel.end(); vector<string>::const_iterator end = sel.end();
@ -739,12 +734,12 @@ void expandPasteRecent(Menu & tomenu, LyXView const * view)
} }
void expandBranches(Menu & tomenu, LyXView const * view) void expandBranches(Menu & tomenu, Buffer const * buf)
{ {
if (!view || !view->buffer()) if (!buf)
return; return;
BufferParams const & params = view->buffer()->getMasterBuffer()->params(); BufferParams const & params = buf->getMasterBuffer()->params();
BranchList::const_iterator cit = params.branchlist().begin(); BranchList::const_iterator cit = params.branchlist().begin();
BranchList::const_iterator end = params.branchlist().end(); BranchList::const_iterator end = params.branchlist().end();
@ -753,9 +748,9 @@ void expandBranches(Menu & tomenu, LyXView const * view)
docstring label = lyx::from_utf8(cit->getBranch()); docstring label = lyx::from_utf8(cit->getBranch());
if (ii < 10) if (ii < 10)
label = convert<docstring>(ii) + lyx::from_ascii(". ") + label + char_type('|') + convert<docstring>(ii); label = convert<docstring>(ii) + lyx::from_ascii(". ") + label + char_type('|') + convert<docstring>(ii);
tomenu.add(MenuItem(MenuItem::Command, label, tomenu.addWithStatusCheck(MenuItem(MenuItem::Command, label,
FuncRequest(LFUN_BRANCH_INSERT, FuncRequest(LFUN_BRANCH_INSERT,
cit->getBranch())), view); cit->getBranch())));
} }
} }
@ -764,7 +759,7 @@ void expandBranches(Menu & tomenu, LyXView const * view)
void MenuBackend::expand(Menu const & frommenu, Menu & tomenu, void MenuBackend::expand(Menu const & frommenu, Menu & tomenu,
LyXView const * view) const Buffer const * buf) const
{ {
if (!tomenu.empty()) if (!tomenu.empty())
tomenu.clear(); tomenu.clear();
@ -773,61 +768,61 @@ void MenuBackend::expand(Menu const & frommenu, Menu & tomenu,
cit != frommenu.end() ; ++cit) { cit != frommenu.end() ; ++cit) {
switch (cit->kind()) { switch (cit->kind()) {
case MenuItem::Lastfiles: case MenuItem::Lastfiles:
expandLastfiles(tomenu, view); expandLastfiles(tomenu);
break; break;
case MenuItem::Documents: case MenuItem::Documents:
expandDocuments(tomenu, view); expandDocuments(tomenu);
break; break;
case MenuItem::ImportFormats: case MenuItem::ImportFormats:
case MenuItem::ViewFormats: case MenuItem::ViewFormats:
case MenuItem::UpdateFormats: case MenuItem::UpdateFormats:
case MenuItem::ExportFormats: case MenuItem::ExportFormats:
expandFormats(cit->kind(), tomenu, view); expandFormats(cit->kind(), tomenu, buf);
break; break;
case MenuItem::CharStyles: case MenuItem::CharStyles:
expandCharStyleInsert(tomenu, view); expandCharStyleInsert(tomenu, buf);
break; break;
case MenuItem::FloatListInsert: case MenuItem::FloatListInsert:
expandFloatListInsert(tomenu, view); expandFloatListInsert(tomenu, buf);
break; break;
case MenuItem::FloatInsert: case MenuItem::FloatInsert:
expandFloatInsert(tomenu, view); expandFloatInsert(tomenu, buf);
break; break;
case MenuItem::PasteRecent: case MenuItem::PasteRecent:
expandPasteRecent(tomenu, view); expandPasteRecent(tomenu, buf);
break; break;
case MenuItem::Branches: case MenuItem::Branches:
expandBranches(tomenu, view); expandBranches(tomenu, buf);
break; break;
case MenuItem::Toc: case MenuItem::Toc:
expandToc(tomenu, view); expandToc(tomenu, buf);
break; break;
case MenuItem::Submenu: { case MenuItem::Submenu: {
MenuItem item(*cit); MenuItem item(*cit);
item.submenu(new Menu(cit->submenuname())); item.submenu(new Menu(cit->submenuname()));
expand(getMenu(cit->submenuname()), expand(getMenu(cit->submenuname()),
*item.submenu(), view); *item.submenu(), buf);
tomenu.add(item, view); tomenu.addWithStatusCheck(item);
} }
break; break;
case MenuItem::Separator: case MenuItem::Separator:
tomenu.add(*cit, view); tomenu.addWithStatusCheck(*cit);
break; break;
case MenuItem::Command: case MenuItem::Command:
if (!specialmenu_ if (!specialmenu_
|| !specialmenu_->hasFunc(cit->func())) || !specialmenu_->hasFunc(cit->func()))
tomenu.add(*cit, view); tomenu.addWithStatusCheck(*cit);
} }
} }

View File

@ -21,7 +21,7 @@
#include <vector> #include <vector>
class LyXLex; class LyXLex;
class LyXView; class Buffer;
class Menu; class Menu;
/// ///
@ -145,8 +145,11 @@ public:
/// ///
explicit Menu(lyx::docstring const & name = lyx::docstring()) explicit Menu(lyx::docstring const & name = lyx::docstring())
: name_(name) {} : name_(name) {}
/// /// Add the menu item unconditionally
Menu & add(MenuItem const &, LyXView const * view = 0); Menu & add(MenuItem const &);
/// Checks the associated FuncRequest status before adding the
/// menu item.
Menu & addWithStatusCheck(MenuItem const &);
/// ///
Menu & read(LyXLex &); Menu & read(LyXLex &);
/// ///
@ -218,7 +221,7 @@ public:
ViewFormats, ExportFormats, UpdateFormats, Branches ViewFormats, ExportFormats, UpdateFormats, Branches
*/ */
void expand(Menu const & frommenu, Menu & tomenu, void expand(Menu const & frommenu, Menu & tomenu,
LyXView const *) const; Buffer const *) const;
/// ///
const_iterator begin() const { const_iterator begin() const {
return menulist_.begin(); return menulist_.begin();

View File

@ -159,7 +159,7 @@ void GMenubar::onSubMenuActivate(MenuItem const * item,
Menu::const_iterator end; Menu::const_iterator end;
if(!item->submenuname().empty()) { if(!item->submenuname().empty()) {
fmenu = &menubackend.getMenu(item->submenuname()); fmenu = &menubackend.getMenu(item->submenuname());
menubackend.expand(*fmenu, lyxmenu->getBackMenu(), view_); menubackend.expand(*fmenu, lyxmenu->getBackMenu(), view_->buffer());
i = lyxmenu->getBackMenu().begin(); i = lyxmenu->getBackMenu().begin();
end = lyxmenu->getBackMenu().end(); end = lyxmenu->getBackMenu().end();
} else { } else {

View File

@ -163,7 +163,7 @@ void QLPopupMenu::showing()
clear(); clear();
Menu tomenu; Menu tomenu;
Menu const frommenu = owner_->backend().getMenu(name_); Menu const frommenu = owner_->backend().getMenu(name_);
owner_->backend().expand(frommenu, tomenu, owner_->view()); owner_->backend().expand(frommenu, tomenu, owner_->view()->buffer());
populate(&tomenu); populate(&tomenu);
#ifdef Q_WS_MACX #ifdef Q_WS_MACX
/* The qt/mac menu code has a very silly hack that /* The qt/mac menu code has a very silly hack that

View File

@ -60,7 +60,7 @@ QLMenubar::QLMenubar(LyXView * view, MenuBackend & mbe)
// for (; m != end; ++m) { // for (; m != end; ++m) {
Menu menu; Menu menu;
menubackend_.expand(menubackend_.getMenubar(), menu, owner_); menubackend_.expand(menubackend_.getMenubar(), menu, owner_->buffer());
Menu::const_iterator m = menu.begin(); Menu::const_iterator m = menu.begin();
Menu::const_iterator end = menu.end(); Menu::const_iterator end = menu.end();
@ -81,7 +81,7 @@ QLMenubar::QLMenubar(LyXView * view, MenuBackend & mbe)
} }
Menu menu; Menu menu;
menubackend_.expand(menubackend_.getMenubar(), menu, owner_); menubackend_.expand(menubackend_.getMenubar(), menu, owner_->buffer());
QLPopupMenu * qMenu = new QLPopupMenu(this, *m, true); QLPopupMenu * qMenu = new QLPopupMenu(this, *m, true);
owner_->menuBar()->addMenu(qMenu); owner_->menuBar()->addMenu(qMenu);

View File

@ -75,7 +75,7 @@ void QLPopupMenu::update()
return; return;
Menu const & fromLyxMenu = owner_->backend().getMenu(name_); Menu const & fromLyxMenu = owner_->backend().getMenu(name_);
owner_->backend().expand(fromLyxMenu, topLevelMenu_, owner_->view()); owner_->backend().expand(fromLyxMenu, topLevelMenu_, owner_->view()->buffer());
if (!owner_->backend().hasMenu(topLevelMenu_.name())) { if (!owner_->backend().hasMenu(topLevelMenu_.name())) {
lyxerr[Debug::GUI] << "\tWARNING: menu seems empty" << lyx::to_utf8(topLevelMenu_.name()) << endl; lyxerr[Debug::GUI] << "\tWARNING: menu seems empty" << lyx::to_utf8(topLevelMenu_.name()) << endl;