]> git.lyx.org Git - lyx.git/blobdiff - src/LyX.cpp
Further cleanup of InsetFlex, InsetCollapsable and InsetLayout:
[lyx.git] / src / LyX.cpp
index 81acf9f6cf3f5ae5423d3a3c59898fa27f58aaa6..829202e54c656e8d3a7d0e12125f0dd529d3026b 100644 (file)
@@ -17,6 +17,7 @@
 
 #include "LyX.h"
 
+#include "Color.h"
 #include "ConverterCache.h"
 #include "Buffer.h"
 #include "buffer_funcs.h"
@@ -29,9 +30,9 @@
 #include "Format.h"
 #include "gettext.h"
 #include "KeyMap.h"
+#include "CmdDef.h"
 #include "Language.h"
 #include "Session.h"
-#include "Color.h"
 #include "LyXAction.h"
 #include "LyXFunc.h"
 #include "Lexer.h"
@@ -62,7 +63,6 @@
 #include "support/Systemcall.h"
 
 #include <boost/bind.hpp>
-#include <boost/filesystem/operations.hpp>
 
 #include <algorithm>
 #include <iostream>
@@ -84,17 +84,13 @@ using std::signal;
 using std::system;
 #endif
 
-namespace fs = boost::filesystem;
-
 namespace lyx {
 
 using support::addName;
 using support::addPath;
 using support::bformat;
 using support::changeExtension;
-using support::createDirectory;
 using support::createLyXTmpDir;
-using support::destroyDir;
 using support::FileName;
 using support::fileSearch;
 using support::getEnv;
@@ -169,6 +165,8 @@ struct LyX::Singletons
        ///
        boost::scoped_ptr<KeyMap> toplevel_keymap_;
        ///
+       boost::scoped_ptr<CmdDef> toplevel_cmddef_;
+       ///
        boost::scoped_ptr<Server> lyx_server_;
        ///
        boost::scoped_ptr<ServerSocket> lyx_socket_;
@@ -320,6 +318,13 @@ KeyMap & LyX::topLevelKeymap()
 }
 
 
+CmdDef & LyX::topLevelCmdDef()
+{
+       BOOST_ASSERT(pimpl_->toplevel_cmddef_.get());
+       return *pimpl_->toplevel_cmddef_.get();
+}
+
+
 Converters & LyX::converters()
 {
        return pimpl_->converters_;
@@ -442,7 +447,7 @@ int LyX::exec(int & argc, char * argv[])
                bool final_success = false;
                for (BufferList::iterator I = begin; I != pimpl_->buffer_list_.end(); ++I) {
                        Buffer * buf = *I;
-                       if (buf != buf->getMasterBuffer())
+                       if (buf != buf->masterBuffer())
                                continue;
                        bool success = false;
                        buf->dispatch(batch_command, &success);
@@ -508,7 +513,7 @@ void LyX::prepareExit()
                LYXERR(Debug::INFO) << "Deleting tmp dir "
                                    << package().temp_dir().absFilename() << endl;
 
-               if (!destroyDir(package().temp_dir())) {
+               if (!package().temp_dir().destroyDirectory()) {
                        docstring const msg =
                                bformat(_("Unable to remove the temporary directory %1$s"),
                                from_utf8(package().temp_dir().absFilename()));
@@ -597,7 +602,7 @@ void LyX::loadFiles()
                        continue;
 
                Buffer * buf = pimpl_->buffer_list_.newBuffer(it->absFilename(), false);
-               if (loadLyXFile(buf, *it)) {
+               if (buf->loadLyXFile(*it)) {
                        ErrorList const & el = buf->errorList("Parse");
                        if (!el.empty())
                                for_each(el.begin(), el.end(),
@@ -687,7 +692,7 @@ void LyX::restoreGuiSession()
        BufferList::iterator end = pimpl_->buffer_list_.end();
        for (; I != end; ++I) {
                Buffer * buf = *I;
-               if (buf != buf->getMasterBuffer())
+               if (buf != buf->masterBuffer())
                        continue;
                updateLabels(*buf);
        }
@@ -966,10 +971,16 @@ bool LyX::init()
        // Set the language defined by the user.
        //setGuiLanguage(lyxrc.gui_language);
 
+       // Set up command definitions
+       pimpl_->toplevel_cmddef_.reset(new CmdDef);
+       pimpl_->toplevel_cmddef_->read(lyxrc.def_file);
+
        // Set up bindings
        pimpl_->toplevel_keymap_.reset(new KeyMap);
-       defaultKeyBindings(pimpl_->toplevel_keymap_.get());
+       pimpl_->toplevel_keymap_->read("site");
        pimpl_->toplevel_keymap_->read(lyxrc.bind_file);
+       // load user bind file user.bind
+       pimpl_->toplevel_keymap_->read("user");
 
        pimpl_->lyxfunc_.initKeySequences(pimpl_->toplevel_keymap_.get());
 
@@ -985,8 +996,7 @@ bool LyX::init()
                prependEnvPath("PATH", lyxrc.path_prefix);
 
        FileName const document_path(lyxrc.document_path);
-       if (fs::exists(document_path.toFilesystemEncoding()) &&
-           fs::is_directory(document_path.toFilesystemEncoding()))
+       if (document_path.exists() && document_path.isDirectory())
                package().document_dir() = document_path;
 
        package().temp_dir() = createLyXTmpDir(FileName(lyxrc.tempdir_path));
@@ -1019,58 +1029,6 @@ bool LyX::init()
 }
 
 
-void LyX::defaultKeyBindings(KeyMap  * kbmap)
-{
-       kbmap->bind("Right", FuncRequest(LFUN_CHAR_FORWARD));
-       kbmap->bind("Left", FuncRequest(LFUN_CHAR_BACKWARD));
-       kbmap->bind("Up", FuncRequest(LFUN_UP));
-       kbmap->bind("Down", FuncRequest(LFUN_DOWN));
-
-       kbmap->bind("Tab", FuncRequest(LFUN_CELL_FORWARD));
-       kbmap->bind("C-Tab", FuncRequest(LFUN_CELL_SPLIT));
-       kbmap->bind("~S-ISO_Left_Tab", FuncRequest(LFUN_CELL_BACKWARD));
-       kbmap->bind("~S-BackTab", FuncRequest(LFUN_CELL_BACKWARD));
-
-       kbmap->bind("Home", FuncRequest(LFUN_LINE_BEGIN));
-       kbmap->bind("End", FuncRequest(LFUN_LINE_END));
-       kbmap->bind("Prior", FuncRequest(LFUN_SCREEN_UP));
-       kbmap->bind("Next", FuncRequest(LFUN_SCREEN_DOWN));
-
-       kbmap->bind("Return", FuncRequest(LFUN_BREAK_PARAGRAPH));
-       //kbmap->bind("~C-~S-~M-nobreakspace", FuncRequest(LFUN_PROTECTEDSPACE));
-
-       kbmap->bind("Delete", FuncRequest(LFUN_CHAR_DELETE_FORWARD));
-       kbmap->bind("BackSpace", FuncRequest(LFUN_CHAR_DELETE_BACKWARD));
-
-       // kbmap->bindings to enable the use of the numeric keypad
-       // e.g. Num Lock set
-       //kbmap->bind("KP_0", FuncRequest(LFUN_SELF_INSERT));
-       //kbmap->bind("KP_Decimal", FuncRequest(LFUN_SELF_INSERT));
-       kbmap->bind("KP_Enter", FuncRequest(LFUN_BREAK_PARAGRAPH));
-       //kbmap->bind("KP_1", FuncRequest(LFUN_SELF_INSERT));
-       //kbmap->bind("KP_2", FuncRequest(LFUN_SELF_INSERT));
-       //kbmap->bind("KP_3", FuncRequest(LFUN_SELF_INSERT));
-       //kbmap->bind("KP_4", FuncRequest(LFUN_SELF_INSERT));
-       //kbmap->bind("KP_5", FuncRequest(LFUN_SELF_INSERT));
-       //kbmap->bind("KP_6", FuncRequest(LFUN_SELF_INSERT));
-       //kbmap->bind("KP_Add", FuncRequest(LFUN_SELF_INSERT));
-       //kbmap->bind("KP_7", FuncRequest(LFUN_SELF_INSERT));
-       //kbmap->bind("KP_8", FuncRequest(LFUN_SELF_INSERT));
-       //kbmap->bind("KP_9", FuncRequest(LFUN_SELF_INSERT));
-       //kbmap->bind("KP_Divide", FuncRequest(LFUN_SELF_INSERT));
-       //kbmap->bind("KP_Multiply", FuncRequest(LFUN_SELF_INSERT));
-       //kbmap->bind("KP_Subtract", FuncRequest(LFUN_SELF_INSERT));
-       kbmap->bind("KP_Right", FuncRequest(LFUN_CHAR_FORWARD));
-       kbmap->bind("KP_Left", FuncRequest(LFUN_CHAR_BACKWARD));
-       kbmap->bind("KP_Up", FuncRequest(LFUN_UP));
-       kbmap->bind("KP_Down", FuncRequest(LFUN_DOWN));
-       kbmap->bind("KP_Home", FuncRequest(LFUN_LINE_BEGIN));
-       kbmap->bind("KP_End", FuncRequest(LFUN_LINE_END));
-       kbmap->bind("KP_Prior", FuncRequest(LFUN_SCREEN_UP));
-       kbmap->bind("KP_Next", FuncRequest(LFUN_SCREEN_DOWN));
-}
-
-
 void LyX::emergencyCleanup() const
 {
        // what to do about tmpfiles is non-obvious. we would
@@ -1114,38 +1072,32 @@ void LyX::deadKeyBindings(KeyMap * kbmap)
 }
 
 
-namespace {
-
 // return true if file does not exist or is older than configure.py.
-bool needsUpdate(string const & file)
+static bool needsUpdate(string const & file)
 {
        // We cannot initialize configure_script directly because the package
        // is not initialized yet when  static objects are constructed.
-       static string configure_script;
+       static FileName configure_script;
        static bool firstrun = true;
        if (firstrun) {
-               configure_script = FileName(addName(
-                               package().system_support().absFilename(),
-                               "configure.py")).toFilesystemEncoding();
+               configure_script =
+                       FileName(addName(package().system_support().absFilename(),
+                               "configure.py"));
                firstrun = false;
        }
 
-       string const absfile = FileName(addName(
-               package().user_support().absFilename(), file)).toFilesystemEncoding();
-       return (! fs::exists(absfile))
-               || (fs::last_write_time(configure_script)
-                   > fs::last_write_time(absfile));
-}
-
+       FileName absfile = 
+               FileName(addName(package().user_support().absFilename(), file));
+       return !absfile.exists()
+               || configure_script.lastModified() > absfile.lastModified();
 }
 
 
 bool LyX::queryUserLyXDir(bool explicit_userdir)
 {
        // Does user directory exist?
-       string const user_support =
-               package().user_support().toFilesystemEncoding();
-       if (fs::exists(user_support) && fs::is_directory(user_support)) {
+       FileName const sup = package().user_support();
+       if (sup.exists() && sup.isDirectory()) {
                first_start = false;
 
                return needsUpdate("lyxrc.defaults")
@@ -1173,10 +1125,9 @@ bool LyX::queryUserLyXDir(bool explicit_userdir)
        }
 
        lyxerr << to_utf8(bformat(_("LyX: Creating directory %1$s"),
-                         from_utf8(package().user_support().absFilename())))
-              << endl;
+                         from_utf8(sup.absFilename()))) << endl;
 
-       if (!createDirectory(package().user_support(), 0755)) {
+       if (!sup.createDirectory(0755)) {
                // Failed, so let's exit.
                lyxerr << to_utf8(_("Failed to create directory. Exiting."))
                       << endl;