]> git.lyx.org Git - lyx.git/blobdiff - src/LyXFunc.cpp
Pick up some stitches dropped by Abdel ;-)
[lyx.git] / src / LyXFunc.cpp
index 2dc4086bb4484d060b6990dcb69a6534edeb3a61..d0826210b9b1af5a1373e34791f944765f07de4b 100644 (file)
@@ -203,18 +203,17 @@ Change::Type lookupChangeType(DocIterator const & dit, bool outer = false)
 
 }
 
+
 LyXFunc::LyXFunc()
-       : lyx_view_(0),
-       encoded_last_key(0),
-       meta_fake_bit(key_modifier::none)
+       : lyx_view_(0), encoded_last_key(0), meta_fake_bit(key_modifier::none)
 {
 }
 
 
 void LyXFunc::initKeySequences(KeyMap * kb)
 {
-       keyseq.reset(new KeySequence(kb, kb));
-       cancel_meta_seq.reset(new KeySequence(kb, kb));
+       keyseq = KeySequence(kb, kb);
+       cancel_meta_seq = KeySequence(kb, kb);
 }
 
 
@@ -232,7 +231,7 @@ void LyXFunc::handleKeyFunc(kb_action action)
 {
        char_type c = encoded_last_key;
 
-       if (keyseq->length())
+       if (keyseq.length())
                c = 0;
 
        BOOST_ASSERT(lyx_view_ && lyx_view_->view());
@@ -240,7 +239,7 @@ void LyXFunc::handleKeyFunc(kb_action action)
                c, get_accent(action).accent, view()->cursor().innerText(), view()->cursor());
        // Need to clear, in case the minibuffer calls these
        // actions
-       keyseq->clear();
+       keyseq.clear();
        // copied verbatim from do_accent_char
        view()->cursor().resetAnchor();
        view()->update();
@@ -293,33 +292,34 @@ void LyXFunc::gotoBookmark(unsigned int idx, bool openFile, bool switchToBuffer)
 }
 
 
-void LyXFunc::processKeySym(KeySymbolPtr keysym, key_modifier::state state)
+void LyXFunc::processKeySym(KeySymbol const & keysym,
+               key_modifier::state state)
 {
-       LYXERR(Debug::KEY) << "KeySym is " << keysym->getSymbolName() << endl;
+       LYXERR(Debug::KEY) << "KeySym is " << keysym.getSymbolName() << endl;
 
        // Do nothing if we have nothing (JMarc)
-       if (!keysym->isOK()) {
+       if (!keysym.isOK()) {
                LYXERR(Debug::KEY) << "Empty kbd action (probably composing)"
                                   << endl;
                return;
        }
 
-       if (keysym->isModifier()) {
+       if (keysym.isModifier()) {
                LYXERR(Debug::KEY) << "isModifier true" << endl;
                return;
        }
 
        //Encoding const * encoding = view()->cursor().getEncoding();
-       //encoded_last_key = keysym->getISOEncoded(encoding ? encoding->name() : "");
+       //encoded_last_key = keysym.getISOEncoded(encoding ? encoding->name() : "");
        // FIXME: encoded_last_key shadows the member variable of the same
        // name. Is that intended?
-       char_type encoded_last_key = keysym->getUCSEncoded();
+       char_type encoded_last_key = keysym.getUCSEncoded();
 
        // Do a one-deep top-level lookup for
        // cancel and meta-fake keys. RVDK_PATCH_5
-       cancel_meta_seq->reset();
+       cancel_meta_seq.reset();
 
-       FuncRequest func = cancel_meta_seq->addkey(keysym, state);
+       FuncRequest func = cancel_meta_seq.addkey(keysym, state);
        LYXERR(Debug::KEY) << BOOST_CURRENT_FUNCTION
                           << " action first set to [" << func.action << ']'
                           << endl;
@@ -329,7 +329,7 @@ void LyXFunc::processKeySym(KeySymbolPtr keysym, key_modifier::state state)
        // Mostly, meta_fake_bit = key_modifier::none. RVDK_PATCH_5.
        if ((func.action != LFUN_CANCEL) && (func.action != LFUN_META_PREFIX)) {
                // remove Caps Lock and Mod2 as a modifiers
-               func = keyseq->addkey(keysym, (state | meta_fake_bit));
+               func = keyseq.addkey(keysym, (state | meta_fake_bit));
                LYXERR(Debug::KEY) << BOOST_CURRENT_FUNCTION
                                   << "action now set to ["
                                   << func.action << ']' << endl;
@@ -346,15 +346,15 @@ void LyXFunc::processKeySym(KeySymbolPtr keysym, key_modifier::state state)
        LYXERR(Debug::KEY) << BOOST_CURRENT_FUNCTION
               << " Key [action="
               << func.action << "]["
-              << to_utf8(keyseq->print(false)) << ']'
+              << to_utf8(keyseq.print(false)) << ']'
               << endl;
 
        // already here we know if it any point in going further
        // why not return already here if action == -1 and
        // num_bytes == 0? (Lgb)
 
-       if (keyseq->length() > 1) {
-               lyx_view_->message(keyseq->print(true));
+       if (keyseq.length() > 1) {
+               lyx_view_->message(keyseq.print(true));
        }
 
 
@@ -363,7 +363,7 @@ void LyXFunc::processKeySym(KeySymbolPtr keysym, key_modifier::state state)
        if (func.action == LFUN_UNKNOWN_ACTION &&
            state == key_modifier::shift) {
                LYXERR(Debug::KEY) << "Trying without shift" << endl;
-               func = keyseq->addkey(keysym, key_modifier::none);
+               func = keyseq.addkey(keysym, key_modifier::none);
                LYXERR(Debug::KEY) << "Action now " << func.action << endl;
        }
 
@@ -371,7 +371,7 @@ void LyXFunc::processKeySym(KeySymbolPtr keysym, key_modifier::state state)
                // Hmm, we didn't match any of the keysequences. See
                // if it's normal insertable text not already covered
                // by a binding
-               if (keysym->isText() && keyseq->length() == 1) {
+               if (keysym.isText() && keyseq.length() == 1) {
                        LYXERR(Debug::KEY) << "isText() is true, inserting." << endl;
                        func = FuncRequest(LFUN_SELF_INSERT,
                                           FuncRequest::KEYBOARD);
@@ -731,6 +731,7 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & cmd) const
        case LFUN_BUFFER_PARAMS_APPLY:
        case LFUN_LAYOUT_MODULES_CLEAR:
        case LFUN_LAYOUT_MODULE_ADD:
+       case LFUN_LAYOUT_RELOAD:
        case LFUN_LYXRC_APPLY:
        case LFUN_BUFFER_NEXT:
        case LFUN_BUFFER_PREVIOUS:
@@ -803,7 +804,7 @@ void showPrintError(string const & name)
 }
 
 
-void loadTextclass(string const & name)
+void loadTextClass(string const & name)
 {
        std::pair<bool, textclass_type> const tc_pair =
                textclasslist.numberOfClass(name);
@@ -883,7 +884,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
 
                case LFUN_COMMAND_PREFIX:
                        BOOST_ASSERT(lyx_view_);
-                       lyx_view_->message(keyseq->printOptions(true));
+                       lyx_view_->message(keyseq.printOptions(true));
                        break;
 
                case LFUN_COMMAND_EXECUTE:
@@ -893,7 +894,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
 
                case LFUN_CANCEL:
                        BOOST_ASSERT(lyx_view_ && lyx_view_->view());
-                       keyseq->reset();
+                       keyseq.reset();
                        meta_fake_bit = key_modifier::none;
                        if (lyx_view_->buffer())
                                // cancel any selection
@@ -903,7 +904,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
 
                case LFUN_META_PREFIX:
                        meta_fake_bit = key_modifier::alt;
-                       setMessage(keyseq->print(true));
+                       setMessage(keyseq.print(true));
                        break;
 
                case LFUN_BUFFER_TOGGLE_READ_ONLY:
@@ -1311,7 +1312,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
                        break;
 
                case LFUN_SERVER_NOTIFY:
-                       dispatch_buffer = keyseq->print(false);
+                       dispatch_buffer = keyseq.print(false);
                        theServer().notifyClient(to_utf8(dispatch_buffer));
                        break;
 
@@ -1750,7 +1751,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
                        
                        Buffer * buffer = lyx_view_->buffer();
 
-                       TextClass_ptr oldClass = buffer->params().getTextClass_ptr();
+                       TextClassPtr oldClass = buffer->params().getTextClassPtr();
                        recordUndoFullDocument(view());
                        
                        istringstream ss(argument);
@@ -1789,7 +1790,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
                case LFUN_LAYOUT_MODULES_CLEAR: {
                        BOOST_ASSERT(lyx_view_);
                        Buffer * buffer = lyx_view_->buffer();
-                       TextClass_ptr oldClass = buffer->params().getTextClass_ptr();
+                       TextClassPtr oldClass = buffer->params().getTextClassPtr();
                        recordUndoFullDocument(view());
                        buffer->params().clearLayoutModules();
                        updateLayout(oldClass, buffer);
@@ -1800,7 +1801,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
                case LFUN_LAYOUT_MODULE_ADD: {
                        BOOST_ASSERT(lyx_view_);
                        Buffer * buffer = lyx_view_->buffer();
-                       TextClass_ptr oldClass = buffer->params().getTextClass_ptr();
+                       TextClassPtr oldClass = buffer->params().getTextClassPtr();
                        recordUndoFullDocument(view());
                        buffer->params().addLayoutModule(argument);
                        updateLayout(oldClass, buffer);
@@ -1812,7 +1813,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
                        BOOST_ASSERT(lyx_view_);
                        Buffer * buffer = lyx_view_->buffer();
 
-                       loadTextclass(argument);
+                       loadTextClass(argument);
 
                        std::pair<bool, textclass_type> const tc_pair =
                                textclasslist.numberOfClass(argument);
@@ -1828,16 +1829,28 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
                                break;
 
                        //Save the old, possibly modular, layout for use in conversion.
-                       TextClass_ptr oldClass = buffer->params().getTextClass_ptr();
+                       TextClassPtr oldClass = buffer->params().getTextClassPtr();
                        recordUndoFullDocument(view());
                        buffer->params().setBaseClass(new_class);
                        updateLayout(oldClass, buffer);
                        updateFlags = Update::Force | Update::FitCursor;
                        break;
                }
+               
+               case LFUN_LAYOUT_RELOAD: {
+                       BOOST_ASSERT(lyx_view_);
+                       Buffer * buffer = lyx_view_->buffer();
+                       TextClassPtr oldClass = buffer->params().getTextClassPtr();
+                       textclass_type const tc = buffer->params().getBaseClass();
+                       textclasslist.reset(tc);
+                       buffer->params().setBaseClass(tc);
+                       updateLayout(oldClass, buffer);
+                       updateFlags = Update::Force | Update::FitCursor;
+                       break;
+               }
 
                case LFUN_TEXTCLASS_LOAD:
-                       loadTextclass(argument);
+                       loadTextClass(argument);
                        break;
 
                case LFUN_LYXRC_APPLY: {
@@ -2265,12 +2278,12 @@ docstring const LyXFunc::viewStatusMessage()
 {
        // When meta-fake key is pressed, show the key sequence so far + "M-".
        if (wasMetaKey())
-               return keyseq->print(true) + "M-";
+               return keyseq.print(true) + "M-";
 
        // Else, when a non-complete key sequence is pressed,
        // show the available options.
-       if (keyseq->length() > 0 && !keyseq->deleted())
-               return keyseq->printOptions(true);
+       if (keyseq.length() > 0 && !keyseq.deleted())
+               return keyseq.printOptions(true);
 
        BOOST_ASSERT(lyx_view_);
        if (!lyx_view_->buffer())
@@ -2293,7 +2306,7 @@ bool LyXFunc::wasMetaKey() const
 }
 
 
-void LyXFunc::updateLayout(TextClass_ptr const & oldlayout,
+void LyXFunc::updateLayout(TextClassPtr const & oldlayout,
                            Buffer * buffer)
 {
        lyx_view_->message(_("Converting document to new document class..."));
@@ -2301,7 +2314,7 @@ void LyXFunc::updateLayout(TextClass_ptr const & oldlayout,
        StableDocIterator backcur(view()->cursor());
        ErrorList & el = buffer->errorList("Class Switch");
        cap::switchBetweenClasses(
-                       oldlayout, buffer->params().getTextClass_ptr(),
+                       oldlayout, buffer->params().getTextClassPtr(),
                        static_cast<InsetText &>(buffer->inset()), el);
 
        view()->setCursor(backcur.asDocIterator(&(buffer->inset())));