]> git.lyx.org Git - lyx.git/blobdiff - src/session.C
Scons: update_po target, part one: language_l10n.pot
[lyx.git] / src / session.C
index 51a210e83e1ccd794a812f7ab65bb05ca65cc382..e6c6967bc321b01c16ea8d40d69c46c4a92600f1 100644 (file)
@@ -184,7 +184,7 @@ void LastFilePosSection::read(istream & is)
                        itmp.ignore(2);  // ignore ", "
                        itmp >> pos;
                        itmp.ignore(2);  // ignore ", "
-                       itmp >> fname;
+                       getline(itmp, fname);
                        if (!absolutePath(fname))
                                continue;
                        FileName const file(fname);
@@ -253,7 +253,7 @@ void BookmarksSection::read(istream & is)
                        itmp.ignore(2);  // ignore ", "
                        itmp >> pos;
                        itmp.ignore(2);  // ignore ", "
-                       itmp >> fname;
+                       getline(itmp, fname);
                        if (!absolutePath(fname))
                                continue;
                        FileName const file(fname);
@@ -332,35 +332,70 @@ void ToolbarSection::read(istream & is)
                                string key = tmp.substr(0, pos);
                                int state;
                                int location;
+                               int posx;
+                               int posy;
                                istringstream value(tmp.substr(pos + 3));
                                value >> state;
-                               value.ignore(1); // ignore " "
                                value >> location;
-                               toolbars[key] = ToolbarInfo(state, location);
+                               value >> posx;
+                               value >> posy;
+                               toolbars.push_back(boost::make_tuple(key, ToolbarInfo(state, location, posx, posy)));
                        } else 
                                lyxerr[Debug::INIT] << "LyX: Warning: Ignore toolbar info: " << tmp << endl;
                } catch (...) {
                        lyxerr[Debug::INIT] << "LyX: Warning: unknown Toolbar info: " << tmp << endl;
                }
        } while (is.good());
+       // sort the toolbars by location, line and position
+       std::sort(toolbars.begin(), toolbars.end());
 }
 
 
 void ToolbarSection::write(ostream & os) const
 {
        os << '\n' << sec_toolbars << '\n';
-       for (ToolbarMap::const_iterator tb = toolbars.begin();
+       for (ToolbarList::const_iterator tb = toolbars.begin();
                tb != toolbars.end(); ++tb) {
-               os << tb->first << " = "
-                 << static_cast<int>(tb->second.state) << " "
-                 << static_cast<int>(tb->second.location) << '\n';
+               os << tb->get<0>() << " = "
+                 << static_cast<int>(tb->get<1>().state) << " "
+                 << static_cast<int>(tb->get<1>().location) << " "
+                 << tb->get<1>().posx << " "
+                 << tb->get<1>().posy << '\n';
        }
 }
 
 
 ToolbarSection::ToolbarInfo & ToolbarSection::load(string const & name)
 {
-       return toolbars[name];
+       for (ToolbarList::iterator tb = toolbars.begin();
+               tb != toolbars.end(); ++tb)
+               if (tb->get<0>() == name)
+                       return tb->get<1>();
+       // add a new item
+       toolbars.push_back(boost::make_tuple(name, ToolbarSection::ToolbarInfo()));
+       return toolbars.back().get<1>();
+}
+
+
+bool operator<(ToolbarSection::ToolbarItem const & a, ToolbarSection::ToolbarItem const & b)
+{
+       ToolbarSection::ToolbarInfo lhs = a.get<1>();
+       ToolbarSection::ToolbarInfo rhs = b.get<1>();
+       // on if before off
+       if (lhs.state != rhs.state)
+               return static_cast<int>(lhs.state) < static_cast<int>(rhs.state);
+       // order of dock does not really matter
+       if (lhs.location != rhs.location)
+               return static_cast<int>(lhs.location) < static_cast<int>(rhs.location);
+       // if the same dock, the order depends on position
+       if (lhs.location == ToolbarSection::ToolbarInfo::TOP ||
+               lhs.location == ToolbarSection::ToolbarInfo::BOTTOM)
+               return lhs.posy < rhs.posy || (lhs.posy == rhs.posy && lhs.posx < rhs.posx);
+       else if (lhs.location == ToolbarSection::ToolbarInfo::LEFT ||
+               lhs.location == ToolbarSection::ToolbarInfo::RIGHT)
+               return lhs.posx < rhs.posx || (lhs.posx == rhs.posx && lhs.posy < rhs.posy);
+       else
+               return true;
 }