]> git.lyx.org Git - lyx.git/commitdiff
Fix bug #6263: Order of Tabs in Menu and used in Ctrl+PgUp/PgDwn is not the same...
authorVincent van Ravesteijn <vfr@lyx.org>
Tue, 30 Nov 2010 13:03:46 +0000 (13:03 +0000)
committerVincent van Ravesteijn <vfr@lyx.org>
Tue, 30 Nov 2010 13:03:46 +0000 (13:03 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@36625 a592a061-630c-0410-9148-cb99ea01b6c8

src/frontends/qt4/GuiView.cpp
src/frontends/qt4/GuiView.h
src/frontends/qt4/Menus.cpp

index fa930e830c225545a05a6e18c78c097a84401f7a..a0f4824867ea69b346becf8ef374f8d7e1b187de 100644 (file)
@@ -1177,6 +1177,15 @@ void GuiView::setBusy(bool busy)
 }
 
 
+GuiWorkArea * GuiView::workArea(int index)
+{
+       if (TabWorkArea * twa = d.currentTabWorkArea())
+               if (index < twa->count())
+                       return dynamic_cast<GuiWorkArea *>(twa->widget(index));
+       return 0;
+}
+
+
 GuiWorkArea * GuiView::workArea(Buffer & buffer)
 {
        if (currentWorkArea()
@@ -2581,24 +2590,24 @@ bool GuiView::inMultiViews(GuiWorkArea * wa)
 
 void GuiView::gotoNextOrPreviousBuffer(NextOrPrevious np)
 {
-       Buffer * const curbuf = documentBufferView()
-               ? &documentBufferView()->buffer() : 0;
-       Buffer * nextbuf = curbuf;
-       while (true) {
-               if (np == NEXTBUFFER)
-                       nextbuf = theBufferList().next(nextbuf);
-               else
-                       nextbuf = theBufferList().previous(nextbuf);
-               if (nextbuf == curbuf)
-                       break;
-               if (nextbuf == 0) {
-                       nextbuf = curbuf;
-                       break;
+       if (!documentBufferView())
+               return;
+       
+       if (TabWorkArea * twa = d.currentTabWorkArea()) {
+               Buffer * const curbuf = &documentBufferView()->buffer();
+               int nwa = twa->count();
+               for (int i = 0; i < nwa; ++i) {
+                       if (&workArea(i)->bufferView().buffer() == curbuf) {
+                               int next_index;
+                               if (np == NEXTBUFFER)
+                                       next_index = (i == nwa - 1 ? 0 : i + 1);
+                               else
+                                       next_index = (i == 0 ? nwa - 1 : i - 1);
+                               setBuffer(&workArea(next_index)->bufferView().buffer());
+                               break;
+                       }
                }
-               if (workArea(*nextbuf))
-                       break;
        }
-       setBuffer(nextbuf);
 }
 
 
index 745956091a954be2b1741be40ed36df171823487..52926ece4308e4b0fcf9df823a64630cc6646247 100644 (file)
@@ -184,6 +184,8 @@ public:
        /// \return the \c Workarea associated to \p  Buffer
        /// \retval 0 if no \c WorkArea is found.
        GuiWorkArea * workArea(Buffer & buffer);
+       /// \return the \c Workarea at index \c index
+       GuiWorkArea * workArea(int index);
 
        /// Add a \c WorkArea 
        /// \return the \c Workarea associated to \p  Buffer
index 309f2156da179b5003cc7542432c9d13a1ddf2dd..4019e5b8cc790b5e32e6ac1f3486bd37f92022aa 100644 (file)
@@ -21,6 +21,7 @@
 #include "Action.h"
 #include "GuiApplication.h"
 #include "GuiView.h"
+#include "GuiWorkArea.h"
 #include "qt_helpers.h"
 
 #include "BiblioInfo.h"
@@ -894,36 +895,49 @@ void MenuDefinition::expandDocuments()
        item.setSubmenu(MenuDefinition(qt_("Hidden|H")));
 
        Buffer * first = theBufferList().first();
-       if (first) {
-               Buffer * b = first;
-               int vis = 1;
-               int invis = 1;
-               
-               // We cannot use a for loop as the buffer list cycles.
-               do {
+       if (!first) {
+               add(MenuItem(MenuItem::Info, qt_("<No Documents Open>")));
+               return;
+       }
+
+       int i = 0;
+       while (true) {
+               GuiWorkArea * wa = guiApp->currentView()->workArea(i);
+               if (!wa)
+                       break;
+               Buffer const & b = wa->bufferView().buffer();
+               QString label = toqstr(b.fileName().displayName(20));
+               if (!b.isClean())
+                       label += "*";
+               if (i < 10)
+                       label = QString::number(i) + ". " + label + '|' + QString::number(i);
+               add(MenuItem(MenuItem::Command, label,
+                       FuncRequest(LFUN_BUFFER_SWITCH, b.absFileName())));
+               ++i;
+       }
+
+
+       i = 0;
+       Buffer * b = first;
+       // We cannot use a for loop as the buffer list cycles.
+       do {
+               bool const shown = guiApp->currentView()
+                       ? guiApp->currentView()->workArea(*b) : false;
+               if (!shown) {
                        QString label = toqstr(b->fileName().displayName(20));
                        if (!b->isClean())
                                label += "*";
-                       bool const shown = guiApp->currentView()
-                                          ? guiApp->currentView()->workArea(*b) : false;
-                       int ii = shown ? vis : invis;
-                       if (ii < 10)
-                               label = QString::number(ii) + ". " + label + '|' + QString::number(ii);
-                       if (shown) {
-                               add(MenuItem(MenuItem::Command, label,
-                                       FuncRequest(LFUN_BUFFER_SWITCH, b->absFileName())));
-                               ++vis;
-                       } else {
-                               item.submenu().add(MenuItem(MenuItem::Command, label,
-                                       FuncRequest(LFUN_BUFFER_SWITCH, b->absFileName())));
-                               ++invis;
-                       }
-                       b = theBufferList().next(b);
-               } while (b != first); 
-               if (!item.submenu().empty())
-                       add(item);
-       } else
-               add(MenuItem(MenuItem::Info, qt_("<No Documents Open>")));
+                       if (i < 10)
+                               label = QString::number(i) + ". " + label + '|' + QString::number(i);
+                       item.submenu().add(MenuItem(MenuItem::Command, label,
+                               FuncRequest(LFUN_BUFFER_SWITCH, b->absFileName())));
+                       ++i;
+               }
+               b = theBufferList().next(b);
+       } while (b != first); 
+       
+       if (!item.submenu().empty())
+               add(item);
 }