]> git.lyx.org Git - lyx.git/commitdiff
Make "devel mode" configurable at run time
authorJean-Marc Lasgouttes <lasgouttes@lyx.org>
Sun, 23 Jul 2017 22:21:43 +0000 (00:21 +0200)
committerJean-Marc Lasgouttes <lasgouttes@lyx.org>
Mon, 24 Jul 2017 20:00:44 +0000 (22:00 +0200)
Traditionally LyX behaves differently when the directive DEVEL_VERSION
is defined at compile time. This covers
* more detailed description of current position in status bar
* the help files are open in read/write mode
* more detailed debug output in the View Source panel

This patch introduces the new function devel-mode-toggle that allows
to use devel mode in stable releases, and vice versa.

The information is saved in the session file. The default is to
disable devel mode.

Remove all traces of DEVEL_VERSION in autoconf and cmake

19 files changed:
CMakeLists.txt
INSTALL.cmake
config/lyxinclude.m4
development/cmake/TODO.txt
development/cmake/config.h.cmake
src/BufferView.cpp
src/Cursor.cpp
src/Cursor.h
src/FuncCode.h
src/LyXAction.cpp
src/Text.cpp
src/Text.h
src/frontends/qt4/GuiApplication.cpp
src/frontends/qt4/GuiCommandBuffer.cpp
src/frontends/qt4/GuiCommandBuffer.h
src/frontends/qt4/GuiView.cpp
src/frontends/qt4/GuiView.h
src/frontends/qt4/GuiViewSource.cpp
src/mathed/InsetMathHull.cpp

index 3c737c7ba27e9f1fca91fd0c9282c8de6490fa29..7490545c1d201c567a7a39ae5645e09e77996d08 100644 (file)
@@ -117,7 +117,6 @@ LYX_OPTION(REQUIRE_SPELLCHECK "Abort if no spellchecker available" OFF ALL)
 LYX_OPTION(ASPELL           "Require aspell" OFF ALL)
 LYX_OPTION(ENCHANT          "Require Enchant" OFF ALL)
 LYX_OPTION(HUNSPELL         "Require Hunspell" OFF ALL)
-LYX_OPTION(DEVEL_VERSION    "Build developer version" OFF ALL)
 LYX_OPTION(RELEASE          "Build release version, build debug when disabled" OFF ALL)
 LYX_OPTION(DEBUG            "Enforce debug build"  OFF ALL)
 LYX_OPTION(NO_OPTIMIZE      "Don't use any optimization/debug flags"  OFF ALL)
index ffe5866b006cb7db797ceaaf796a36043428e408..4c8d4789f322b19d00ed7a49f349b919ab8a1b85 100644 (file)
@@ -141,7 +141,6 @@ Build options
     -- LYX_ASPELL               = OFF    : Require aspell
     -- LYX_ENCHANT              = OFF    : Require Enchant
     -- LYX_HUNSPELL             = OFF    : Require Hunspell
-    -- LYX_DEVEL_VERSION        = OFF    : Build developer version
     -- LYX_RELEASE              = OFF    : Build release version, build debug when disabled
     -- LYX_PACKAGE_SUFFIX       = ON     : Use version suffix for packaging
     -- LYX_PCH                  = OFF    : Use precompiled headers
index b07bf38f2438d3fd941c5684e3ef845a3b7656ae..ead704b1665f17da4f7a3384aa3cb8bae184188c 100644 (file)
@@ -33,7 +33,6 @@ AC_MSG_RESULT([$build_type])
 lyx_flags="$lyx_flags build=$build_type"
 case $build_type in
     development) lyx_devel_version=yes
-                 AC_DEFINE(DEVEL_VERSION, 1, [Define if you are building a development version of LyX])
                 LYX_DATE="not released yet" ;;
     prerelease) lyx_prerelease=yes ;;
 esac
index 45c1e0df84ff475fadf4778658e48e3ca2373cf9..32cf54b2924e8a83ae0f8b8901ce1baea29ade28 100644 (file)
@@ -26,8 +26,6 @@ Bug fixing
 
 Documentation
   * Better documentation, variable naming, more automake-like
-  * what does LYX_DEVEL_VERSION do?
-  * What is the difference with LYX_RELEASE=OFF?
   * how do I specify whether I want debug informations (-g flag) for unix?
 
 
index f0a504a81a73078db5407db5240448ae44cb52f4..7fac0b00b574b1f569d4448b9f7f7d13ecf26efa 100644 (file)
 #endif
 
 
-#cmakedefine LYX_DEVEL_VERSION 1
-#if defined(LYX_DEVEL_VERSION)
-       #define DEVEL_VERSION 1
-#else
-       #undef DEVEL_VERSION
-#endif
 #cmakedefine PACKAGE "${PACKAGE}"
 #cmakedefine PACKAGE_VERSION "${PACKAGE_VERSION}"
 #define PACKAGE_STRING "LyX ${PACKAGE_VERSION}"
index 19547ef56448e1d43245a3d973e0a250fff81cd0..d2215627cfbdb2ef7be4b54793ce4dc5ed78dd99 100644 (file)
@@ -1391,7 +1391,7 @@ void BufferView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
                break;
 
        case LFUN_FONT_STATE:
-               dr.setMessage(cur.currentState());
+               dr.setMessage(cur.currentState(false));
                break;
 
        case LFUN_BOOKMARK_SAVE:
index 0c8ee1d6c5abe5c1a59bccfe7ca784aabdcf9c80..a139a2b310fd2a1de6674e62b762a6abf78039f9 100644 (file)
@@ -1057,7 +1057,7 @@ void Cursor::updateTextTargetOffset()
 }
 
 
-void Cursor::info(odocstream & os) const
+void Cursor::info(odocstream & os, bool devel_mode) const
 {
        for (int i = 1, n = depth(); i < n; ++i) {
                operator[](i).inset().infoize(os);
@@ -1069,6 +1069,14 @@ void Cursor::info(odocstream & os) const
                if (inset)
                        prevInset()->infoize2(os);
        }
+       if (devel_mode) {
+               InsetMath * math = inset().asInsetMath();
+               if (math)
+                       os << _(", Inset: ") << math->id();
+               os << _(", Cell: ") << idx();
+               os << _(", Position: ") << pos();
+       }
+
 }
 
 
@@ -2106,23 +2114,16 @@ docstring Cursor::selectionAsString(bool with_label) const
 }
 
 
-docstring Cursor::currentState() const
+docstring Cursor::currentState(bool devel_mode) const
 {
        if (inMathed()) {
                odocstringstream os;
-               info(os);
-#ifdef DEVEL_VERSION
-               InsetMath * math = inset().asInsetMath();
-               if (math)
-                       os << _(", Inset: ") << math->id();
-               os << _(", Cell: ") << idx();
-               os << _(", Position: ") << pos();
-#endif
+               info(os, devel_mode);
                return os.str();
        }
 
        if (inTexted())
-               return text()->currentState(*this);
+               return text()->currentState(*this, devel_mode);
 
        return docstring();
 }
index d1e13f684e297792c6a9b700793308a470c18a1b..5c675c493ac7413e6458abca9f577c7806c406fd 100644 (file)
@@ -205,7 +205,7 @@ public:
        ///
        docstring selectionAsString(bool with_label) const;
        ///
-       docstring currentState() const;
+       docstring currentState(bool devel_mode) const;
 
        /// auto-correct mode
        bool autocorrect() const { return autocorrect_; }
@@ -300,7 +300,7 @@ public:
        /// access to owning BufferView
        BufferView & bv() const;
        /// get some interesting description of top position
-       void info(odocstream & os) const;
+       void info(odocstream & os, bool devel_mode) const;
        /// are we in math mode (2), text mode (1) or unsure (0)?
        int currentMode();
        /// reset cursor bottom to the beginning of the top inset
index 7949bce41a8954f25be78c52801a28759def398c..92d5e3526858b84a0a7c412d22ba8aaba226e29b 100644 (file)
@@ -473,6 +473,7 @@ enum FuncCode
        LFUN_BUFFER_ZOOM,               // daniel, 20161028
        LFUN_TOOLBAR_MOVABLE,           // daniel, 20160712
        LFUN_FONT_CROSSOUT,             // uwestoehr 20170404
+       LFUN_DEVEL_MODE_TOGGLE,         // lasgouttes 20170723
        LFUN_LASTACTION                 // end of the table
 };
 
index 56b810306ee631eebb7129407ca6ed3dc728f01a..6aaec9242881fe4bdd4beac0a3995c6d3a371bd1 100644 (file)
@@ -1395,6 +1395,19 @@ void LyXAction::init()
                { LFUN_DEPTH_INCREMENT, "depth-increment", Noop, Edit },
 
 
+/*!
+ * \var lyx::FuncCode lyx::LFUN_DEVEL_MODE_TOGGLE
+ * \li Action: toggle a mode where more information is given in UI
+ * \li Syntax: devel-mode-toggle
+ * \li Notion: in so called "devel" mode, the information given in the
+ *             status bar is more precise, and the help documents are
+ *             open in editing mode.
+ * \li Origin: lasgouttes, 23 Jul 2017
+ * \endvar
+ */
+               { LFUN_DEVEL_MODE_TOGGLE, "devel-mode-toggle", NoBuffer, System },
+
+
 /*!
  * \var lyx::FuncCode lyx::LFUN_DIALOG_DISCONNECT_INSET
  * \li Action: Closes opened connection to opened inset.
index 8cac506e566379473cf314683c7eaf93eeee8ed4..e1c37faf3ab2700376d70f2d2f2e0ca2b4e3fc8a 100644 (file)
@@ -1896,7 +1896,7 @@ bool Text::read(Lexer & lex,
 
 
 // Returns the current font and depth as a message.
-docstring Text::currentState(Cursor const & cur) const
+docstring Text::currentState(Cursor const & cur, bool devel_mode) const
 {
        LBUFERR(this == cur.text());
        Buffer & buf = *cur.buffer();
@@ -1953,22 +1953,22 @@ docstring Text::currentState(Cursor const & cur) const
                }
        }
 
-#ifdef DEVEL_VERSION
-       os << _(", Inset: ") << &cur.inset();
-       os << _(", Paragraph: ") << cur.pit();
-       os << _(", Id: ") << par.id();
-       os << _(", Position: ") << cur.pos();
-       // FIXME: Why is the check for par.size() needed?
-       // We are called with cur.pos() == par.size() quite often.
-       if (!par.empty() && cur.pos() < par.size()) {
-               // Force output of code point, not character
-               size_t const c = par.getChar(cur.pos());
-               os << _(", Char: 0x") << hex << c;
-       }
-       os << _(", Boundary: ") << cur.boundary();
-//     Row & row = cur.textRow();
-//     os << bformat(_(", Row b:%1$d e:%2$d"), row.pos(), row.endpos());
-#endif
+       if (devel_mode) {
+               os << _(", Inset: ") << &cur.inset();
+               os << _(", Paragraph: ") << cur.pit();
+               os << _(", Id: ") << par.id();
+               os << _(", Position: ") << cur.pos();
+               // FIXME: Why is the check for par.size() needed?
+               // We are called with cur.pos() == par.size() quite often.
+               if (!par.empty() && cur.pos() < par.size()) {
+                       // Force output of code point, not character
+                       size_t const c = par.getChar(cur.pos());
+                       os << _(", Char: 0x") << hex << c;
+               }
+               os << _(", Boundary: ") << cur.boundary();
+//             Row & row = cur.textRow();
+//             os << bformat(_(", Row b:%1$d e:%2$d"), row.pos(), row.endpos());
+       }
        return os.str();
 }
 
index fc602fcf9775e325e54ea83aacb7c203a3c460c3..046ca9d4c83753db394a575cbba94f49e9298139 100644 (file)
@@ -157,8 +157,8 @@ public:
        /// read-write access to individual paragraph
        Paragraph & getPar(pit_type pit) { return pars_[pit]; }
        // Returns the current font and depth as a message.
-       /// FIXME: replace Cursor with DocIterator.
-       docstring currentState(Cursor const & cur) const;
+       // When \param devel_mode is true, add more precise information
+       docstring currentState(Cursor const & cur, bool devel_mode) const;
 
        /** Find the word under \c from in the relative location
         *  defined by \c word_location.
index c9320ec403bbbc7ca214c62b4d68bd12991281e2..d6a219e75e80cb042b56f3fc8f9f62bc45a127ba 100644 (file)
@@ -1727,13 +1727,8 @@ void GuiApplication::dispatch(FuncRequest const & cmd, DispatchResult & dr)
                current_view_->message(bformat(_("Opening help file %1$s..."),
                                               makeDisplayPath(fname.absFileName())));
                Buffer * buf = current_view_->loadDocument(fname, false);
-
-#ifndef DEVEL_VERSION
                if (buf)
-                       buf->setReadonly(true);
-#else
-               (void) buf;
-#endif
+                       buf->setReadonly(!current_view_->develMode());
                break;
        }
 
index c13bdfe5785f4e41a0eb31054ecc397a7a9f1b5e..4d94d97738af0af4d8aac90d9487bdd6abf1686e 100644 (file)
@@ -295,12 +295,6 @@ string const GuiCommandBuffer::historyDown()
 }
 
 
-docstring const GuiCommandBuffer::getCurrentState() const
-{
-       return view_->currentBufferView()->cursor().currentState();
-}
-
-
 vector<string> const
 GuiCommandBuffer::completions(string const & prefix, string & new_prefix)
 {
index 49ed9bf0432fc39d08f1453b111166983e718eb3..41b39d2644ad51569ed5ab74458964b899581cc9 100644 (file)
@@ -65,9 +65,6 @@ private:
        /// return the next history entry if any
        std::string const historyDown();
 
-       /// return the font and depth in the active BufferView as a message.
-       docstring const getCurrentState() const;
-
        /// open a listbox and show the contents of the list. When reversed
        /// is true, the contents of the list is filled bottom-up.
        void showList(std::vector<std::string> const & list,
index a257bb72686a327a993c0c9b17745d75a7c9b466..d2e3ed9f2780d5e3bcbfb5e972a700d07df5b0fa 100644 (file)
@@ -508,7 +508,7 @@ QSet<Buffer const *> GuiView::GuiViewPrivate::busyBuffers;
 
 GuiView::GuiView(int id)
        : d(*new GuiViewPrivate(this)), id_(id), closing_(false), busy_(0),
-         command_execute_(false), minibuffer_focus_(false)
+         command_execute_(false), minibuffer_focus_(false), devel_mode_(false)
 {
        connect(this, SIGNAL(bufferViewChanged()),
                this, SLOT(onBufferViewChanged()));
@@ -715,6 +715,7 @@ void GuiView::saveLayout() const
 {
        QSettings settings;
        settings.setValue("zoom", lyxrc.currentZoom);
+       settings.setValue("devel_mode", devel_mode_);
        settings.beginGroup("views");
        settings.beginGroup(QString::number(id_));
 #if defined(Q_WS_X11) || defined(QPA_XCB)
@@ -746,6 +747,7 @@ bool GuiView::restoreLayout()
        QSettings settings;
        lyxrc.currentZoom = settings.value("zoom", lyxrc.zoom).toInt();
        lyx::dispatch(FuncRequest(LFUN_BUFFER_ZOOM, convert<docstring>(lyxrc.currentZoom)));
+       devel_mode_ = settings.value("devel_mode", devel_mode_).toBool();
        settings.beginGroup("views");
        settings.beginGroup(QString::number(id_));
        QString const icon_key = "icon_size";
@@ -1254,7 +1256,7 @@ void GuiView::showMessage()
        if (msg.isEmpty()) {
                BufferView const * bv = currentBufferView();
                if (bv)
-                       msg = toqstr(bv->cursor().currentState());
+                       msg = toqstr(bv->cursor().currentState(devel_mode_));
                else
                        msg = qt_("Welcome to LyX!");
        }
@@ -1900,6 +1902,10 @@ bool GuiView::getStatus(FuncRequest const & cmd, FuncStatus & flag)
                enable = d.tabWorkAreaCount() > 1;
                break;
 
+       case LFUN_DEVEL_MODE_TOGGLE:
+               flag.setOnOff(devel_mode_);
+               break;
+
        case LFUN_TOOLBAR_TOGGLE: {
                string const name = cmd.getArg(0);
                if (GuiToolbar * t = toolbar(name))
@@ -3861,6 +3867,14 @@ void GuiView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
                        closeBufferAll();
                        break;
 
+               case LFUN_DEVEL_MODE_TOGGLE:
+                       devel_mode_ = !devel_mode_;
+                       if (devel_mode_)
+                               dr.setMessage(_("Developer mode is now enabled."));
+                       else
+                               dr.setMessage(_("Developer mode is now disabled."));
+                       break;
+
                case LFUN_TOOLBAR_TOGGLE: {
                        string const name = cmd.getArg(0);
                        if (GuiToolbar * t = toolbar(name))
index a3158a42f369dd24886e8edf0464a5700d6fcee0..998fcc255b5d785e796c98ceb72ef55047eb6d29 100644 (file)
@@ -343,6 +343,8 @@ public:
        void hideDialog(std::string const & name, Inset * inset);
        ///
        void disconnectDialog(std::string const & name);
+       ///
+       bool develMode() const { return devel_mode_; }
 
 private:
        /// Saves the layout and geometry of the window
@@ -469,6 +471,9 @@ private:
 
        // movability flag of all toolbars
        bool toolbarsMovable_;
+
+       // developer mode
+       bool devel_mode_;
 };
 
 } // namespace frontend
index d58e173837a37ade140fece22c7d81f379c665a5..80d3c0b459419fdbdc0810f4ef331afcfc8f6974 100644 (file)
@@ -197,20 +197,21 @@ void ViewSourceWidget::updateView(BufferView const * bv)
                   masterPerspectiveCB->isChecked());
        QString old = document_->toPlainText();
        QString qcontent = toqstr(content);
-#ifdef DEVEL_VERSION
-       // output tex<->row correspondences in the source panel if the "-dbg latex"
-       // option is given.
-       if (texrow_ && lyx::lyxerr.debugging(Debug::LATEX)) {
-               QStringList list = qcontent.split(QChar('\n'));
-               docstring_list dlist;
-               for (QStringList::const_iterator it = list.begin(); it != list.end(); ++it)
-                       dlist.push_back(from_utf8(fromqstr(*it)));
-               texrow_->prepend(dlist);
-               qcontent.clear();
-               for (docstring_list::iterator it = dlist.begin(); it != dlist.end(); ++it)
-                       qcontent += toqstr(*it) + '\n';
+       if (guiApp->currentView()->develMode()) {
+               // output tex<->row correspondences in the source panel if the "-dbg latex"
+               // option is given.
+               if (texrow_ && lyx::lyxerr.debugging(Debug::LATEX)) {
+                       QStringList list = qcontent.split(QChar('\n'));
+                       docstring_list dlist;
+                       for (QStringList::const_iterator it = list.begin(); it != list.end(); ++it)
+                               dlist.push_back(from_utf8(fromqstr(*it)));
+                       texrow_->prepend(dlist);
+                       qcontent.clear();
+                       for (docstring_list::iterator it = dlist.begin(); it != dlist.end(); ++it)
+                               qcontent += toqstr(*it) + '\n';
+               }
        }
-#endif
+
        // prevent gotoCursor()
        QSignalBlocker blocker(viewSourceTV);
        bool const changed = setText(qcontent);
index 01501929c642f5b3d5078a715292cfd3f5ecc46a..67c59ddede1b8e1ee5f1f987ab871cf67fd5835d 100644 (file)
@@ -2248,7 +2248,7 @@ void InsetMathHull::revealCodes(Cursor & cur) const
        if (!cur.inMathed())
                return;
        odocstringstream os;
-       cur.info(os);
+       cur.info(os, false);
        cur.message(os.str());
 /*
        // write something to the minibuffer