compiling not tested. two patches from angus with some small fixes

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@1220 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Lars Gullik Bjønnes 2000-11-15 18:02:45 +00:00
parent acb3eecb5d
commit d1e95f33c4
21 changed files with 828 additions and 577 deletions

View File

@ -73,7 +73,7 @@ The source code package is available at:
and at the mirrors listed above. and at the mirrors listed above.
You need to have XForms version 0.88 or newer to compile your own You need to have XForms version 0.88 or newer to compile your own
version. Version 0.88 is highly recomended. LyX should also compile version. Version 0.88 is highly recommended. LyX should also compile
with 0.89. with 0.89.
Credits Credits

View File

@ -1,3 +1,62 @@
2000-11-15 Angus Leeming <a.leeming@ic.ac.uk>
* src/ColorHandler.[Ch]: removed some header files from .h file.
Included LColor.h in .C file.
* src/LColor.[Ch]: made class copyable so that I could create a
system_lcolor instance.
* src/Painter.h: removed LColor.h.
* src/lyx_gui.C (create_forms): used AddName.
* src/lyx_main.C (init): copied lcolor to system_lcolr prior to reading
of user preferences/lyxrc file.
* src/lyxrc.C (output): output changes to lcolor.
* src/frontends/xforms/Color.[Ch]: Changed X11Color to a new struct,
NamedColor.
Moved class xformColor to files xform_helpers.[Ch]. These files,
Color.[Ch], could now be moved into src if they would be useful to
other GUIs.
* src/frontends/xforms/xform_helpers.[Ch]: moved class XformColor here.
Also moved FormPreferences::browseFile here as it can be used by any
xform dialog with a "Browse" button. FormGraphics is a perfect example.
* src/support/filetools.[Ch] (WriteableDir, ReadableDir, WriteableFile,
ReadableFile): changed the FormPreferences methods a little and moved
them here as they'll be useful elsewhere also.
* src/frontends/xforms/FormPreferences.h: a bit more cleaning up.
Removed some header files and used forward declarations instead.
Better commenting.
Removed some methods as they'll be useful elsewhere (see above).
* src/frontends/xforms/FormPreferences.C: a bit more cleaning up.
Can also now modify the LyX LColors. However, for reasons that I don't
yet understand, it appears that we can use
LyXFunc::Dispatch(LFUN_SET_COLOR, arg) only when we have a buffer
present. The problem appears to lie in ColorHandler, because I can
change the color using LColor.SetColor(). Similarly, when reading in a
preferences file with some set_color instances, I'll get a warning
like: Color sea green is undefined or may not be redefined
Bad lyxrc set_color for sea green
Once the buffer is loaded, however, I can happily change to this color.
Finally, it appears that I have to set the color of "inset frame"
explicitly, or it oscillates from "black" to "indian red" with each
successive "Apply".
2000-11-15 Angus Leeming <a.leeming@ic.ac.uk>
* ANNOUNCE: corrected a spelling mistake.
* src/tabular.C (OldFormatRead): variable "h" was set but never used.
Removed.
2000-11-15 Lars Gullik Bjønnes <larsbj@lyx.org> 2000-11-15 Lars Gullik Bjønnes <larsbj@lyx.org>
* src/kbsequence.C (addkey): use a vector as per Andre Poenitz patch. * src/kbsequence.C (addkey): use a vector as per Andre Poenitz patch.

View File

@ -196,16 +196,16 @@ dnl Check the version of g++
fi fi
if test x$with_warnings = xyes ; then if test x$with_warnings = xyes ; then
case $gxx_version in case $gxx_version in
2.95.*) CXXFLAGS="$CXXFLAGS -W -Wall -Wconversion -Winline";; 2.95.*) CXXFLAGS="$CXXFLAGS -W -Wall";;
2.96*) CXXFLAGS="$CXXFLAGS -W -Wall -Wconversion -Winline";; 2.96*) CXXFLAGS="$CXXFLAGS -W -Wall";;
2.97*) CXXFLAGS="$CXXFLAGS -W -Wall -Wconversion -Winline";; 2.97*) CXXFLAGS="$CXXFLAGS -W -Wall";;
*) CXXFLAGS="$CXXFLAGS -W -Wall -Wno-return-type";; *) CXXFLAGS="$CXXFLAGS -W -Wall";;
esac esac
if test $lyx_devel_version = yes ; then if test $lyx_devel_version = yes ; then
case $gxx_version in case $gxx_version in
2.95.*) ;; 2.95.*) CXXFLAGS="$CXXFLAGS -Wconversion -Winline";;
2.96*) ;; 2.96*) CXXFLAGS="$CXXFLAGS -Wconversion -Winline";;
2.97*) ;; 2.97*) CXXFLAGS="$CXXFLAGS -Wconversion -Winline";;
*2.91*) ;; *2.91*) ;;
*) CXXFLAGS="$CXXFLAGS -pedantic";; *) CXXFLAGS="$CXXFLAGS -pedantic";;
esac esac

View File

@ -20,6 +20,7 @@
#include "debug.h" #include "debug.h"
#include "ColorHandler.h" #include "ColorHandler.h"
#include "LColor.h"
#include "gettext.h" #include "gettext.h"
using std::endl; using std::endl;

View File

@ -18,9 +18,7 @@
// This is only included to provide stuff for the non-public sections // This is only included to provide stuff for the non-public sections
#include <X11/Xlib.h> #include <X11/Xlib.h>
#include <map>
#include "PainterBase.h" #include "PainterBase.h"
#include "LColor.h"
class LyXFont; class LyXFont;
class WorkArea; class WorkArea;

View File

@ -214,3 +214,5 @@ LColor::color LColor::getFromLyXName(string const & lyxname) const
// The evil global LColor instance // The evil global LColor instance
LColor lcolor; LColor lcolor;
// An equally evil global system LColor instance
LColor system_lcolor;

View File

@ -32,7 +32,10 @@
- A logical color, such as no color, inherit, math - A logical color, such as no color, inherit, math
*/ */
class LColor : public noncopyable { class LColor //: public noncopyable {
// made copyable for same reasons as LyXRC was made copyable. See there for
// explanation.
{
public: public:
/// Names of colors, including all logical colors /// Names of colors, including all logical colors
enum color { enum color {
@ -216,5 +219,7 @@ private:
/// ///
extern LColor lcolor; extern LColor lcolor;
///
extern LColor system_lcolor;
#endif #endif

View File

@ -22,7 +22,6 @@
#include <X11/Xlib.h> #include <X11/Xlib.h>
#include "PainterBase.h" #include "PainterBase.h"
#include "LColor.h"
class LyXFont; class LyXFont;
class WorkArea; class WorkArea;

View File

@ -94,7 +94,7 @@ public:
virtual PainterBase & fillPolygon( virtual PainterBase & fillPolygon(
int const * xp, int const * yp, int const * xp, int const * yp,
int np, int np,
LColor::color =LColor::foreground) = 0; LColor::color = LColor::foreground) = 0;
/// Draw lines from x1,y1 to x2,y2. They are arrays /// Draw lines from x1,y1 to x2,y2. They are arrays
virtual PainterBase & segments( virtual PainterBase & segments(

View File

@ -18,13 +18,10 @@
#include <algorithm> // max #include <algorithm> // max
#include <cmath> // floor #include <cmath> // floor
#include <fstream> // ofstream
#include "Color.h" #include "Color.h"
#include "lyxlex.h"
using std::max; using std::max;
using std::min; using std::min;
using std::ofstream;
static int const nohue = -1; static int const nohue = -1;
@ -131,92 +128,3 @@ HSVColor::HSVColor(RGBColor const & rgb)
h += 360; h += 360;
} }
} }
// sorted by hand to prevent LyXLex from complaining on read().
static
keyword_item xformTags[] = {
// { "\\gui_active_tab", FL_LIGHTER_COL1 },
{ "\\gui_background", FL_COL1 },
{ "\\gui_buttonbottom", FL_BOTTOM_BCOL },
{ "\\gui_buttonleft", FL_LEFT_BCOL },
{ "\\gui_buttonright", FL_RIGHT_BCOL },
{ "\\gui_buttontop", FL_TOP_BCOL },
{ "\\gui_inactive", FL_INACTIVE },
{ "\\gui_push_button", FL_YELLOW },
{ "\\gui_selected", FL_MCOL },
{ "\\gui_text", FL_BLACK }
};
static const int xformCount = sizeof(xformTags) / sizeof(keyword_item);
bool XformColor::read(string const & filename)
{
LyXLex lexrc(xformTags, xformCount);
if (!lexrc.setFile(filename))
return false;
while (lexrc.IsOK()) {
int const le = lexrc.lex();
switch (le) {
case LyXLex::LEX_UNDEF:
lexrc.printError("Unknown tag `$$Token'");
continue;
case LyXLex::LEX_FEOF:
continue;
default: break;
}
RGBColor col;
if (!lexrc.next()) break;
col.r = lexrc.GetInteger();
if (!lexrc.next()) break;
col.g = lexrc.GetInteger();
if (!lexrc.next()) break;
col.b = lexrc.GetInteger();
fl_mapcolor(le, col.r, col.g, col.b);
}
return true;
}
bool XformColor::write(string const & filename)
{
ofstream os(filename.c_str());
if (!os)
return false;
os << "### This file is part of\n"
<< "### ========================================================\n"
<< "### LyX, The Document Processor\n"
<< "###\n"
<< "### Copyright 1995 Matthias Ettrich\n"
<< "### Copyright 1995-2000 The LyX Team.\n"
<< "###\n"
<< "### ========================================================\n"
<< "\n"
<< "# This file is written by LyX, if you want to make your own\n"
<< "# modifications you should do them from inside LyX and save\n"
<< "\n";
for (int i = 0; i < xformCount; ++i) {
string const tag = xformTags[i].tag;
int const colorID = xformTags[i].code;
RGBColor color;
fl_getmcolor(colorID, &color.r, &color.g, &color.b);
os << tag << " "
<< color.r << " " << color.g << " " << color.b << "\n";
}
return true;
}

View File

@ -12,8 +12,6 @@
#ifndef COLOR_H #ifndef COLOR_H
#define COLOR_H #define COLOR_H
#include <utility> // for pair
#ifdef __GNUG_ #ifdef __GNUG_
#pragma interface #pragma interface
#endif #endif
@ -42,17 +40,13 @@ struct RGBColor {
RGBColor(HSVColor const &); RGBColor(HSVColor const &);
}; };
typedef std::pair<string, RGBColor> X11Color; struct NamedColor : public RGBColor {
/// struct holding xform-specific colors
struct XformColor {
string name; string name;
int colorID; NamedColor() : RGBColor() {}
RGBColor col; NamedColor(string const & n, RGBColor const & c )
XformColor() : colorID(0) {} : RGBColor(c), name(n) {}
RGBColor const & color() const { return *this; }
string const & getname() const { return name; } string const & getname() const { return name; }
static bool read(string const &);
static bool write(string const &);
}; };
inline inline

File diff suppressed because it is too large Load Diff

View File

@ -18,10 +18,7 @@
#define FORMPREFERENCES_H #define FORMPREFERENCES_H
#include <utility> // for pair #include <utility> // for pair
#include "FormBase.h" #include "FormBase.h"
#include "Color.h"
#include "LString.h"
#ifdef __GNUG_ #ifdef __GNUG_
#pragma interface #pragma interface
@ -32,6 +29,9 @@ class Command;
class Dialogs; class Dialogs;
class Format; class Format;
class LyXView; class LyXView;
class NamedColor;
class RGBColor;
class XformColor;
struct FD_form_colors; struct FD_form_colors;
struct FD_form_converters; struct FD_form_converters;
struct FD_form_formats; struct FD_form_formats;
@ -67,9 +67,9 @@ private:
virtual void redraw(); virtual void redraw();
/// Update the dialog. /// Update the dialog.
virtual void update(); virtual void update();
/// /// Hide the dialog.
virtual void hide(); virtual void hide();
/// OK from dialog /// OK (Save) from dialog
virtual void ok(); virtual void ok();
/// Apply from dialog /// Apply from dialog
virtual void apply(); virtual void apply();
@ -77,48 +77,25 @@ private:
virtual bool input(FL_OBJECT *, long); virtual bool input(FL_OBJECT *, long);
/// Build the dialog /// Build the dialog
virtual void build(); virtual void build();
/// control which feedback message is output /// Pointer to the actual instantiation of xform's form.
void feedback( FL_OBJECT * );
/// The handler for the preemptive feedback
void Feedback(FL_OBJECT *, int);
///
virtual FL_FORM * form() const; virtual FL_FORM * form() const;
/// control which feedback message is output
void feedback(FL_OBJECT *);
/** Helper functions available to the various tab folders. /// Set the preemptive handler for each FL_OBJECT.
*/ static void setPreHandler(FL_OBJECT *);
/// The preemptive handler for feedback messages.
/// void Feedback(FL_OBJECT *, int);
bool WriteableDir( string const & ); /// Print a warning message and set warning flag.
///
bool ReadableDir( string const & );
///
bool WriteableFile( string const &, string const & = string() );
///
bool ReadableFile( string const &, string const & = string() );
///
void setPreHandler( FL_OBJECT * ) const;
///
void printWarning( string const & ); void printWarning( string const & );
/** Launch a file dialog and modify input if it returns a new file.
/** title: filedlg title, pattern: *.ps etc For an explanation of the various parameters, see xform_helpers.h.
extra buttons on filedlg: dir1 = (name, dir), dir2 = (name, dir)
*/ */
void browse( FL_OBJECT * input,
string const & title, string const & pattern,
std::pair<string,string> const & dir1,
std::pair<string,string> const & dir2 );
///
bool browse(FL_OBJECT * input,
string const & title, string const & pattern,
std::pair<string,string> const & dir1 //=
//std::pair<string,string>()
,
std::pair<string,string> const & dir2 //=
//std::pair<string,string>()
);
/// called from browse()
string const browseFile( string const & filename,
string const & title, string const & pattern,
std::pair<string,string> const & dir1,
std::pair<string,string> const & dir2 ) const;
/// Type definitions from the fdesign produced header file. /// Type definitions from the fdesign produced header file.
FD_form_preferences * build_preferences(); FD_form_preferences * build_preferences();
/// ///
@ -214,7 +191,7 @@ private:
/// ///
FD_form_colors * dialog_; FD_form_colors * dialog_;
/// A vector of RGB colors and associated name. /// A vector of RGB colors and associated name.
static std::vector<X11Color> colorDB; static std::vector<NamedColor> colorDB;
/// A vector of xform RGB colors and associated name. /// A vector of xform RGB colors and associated name.
static std::vector<XformColor> xformColorDB; static std::vector<XformColor> xformColorDB;
}; };
@ -225,7 +202,7 @@ private:
class Converters { class Converters {
public: public:
/// ///
Converters( FormPreferences & p ) : parent_(p), dialog_(0) {} Converters( FormPreferences & p ) : parent_(p), dialog_(0) {}
/// ///
~Converters(); ~Converters();
/// ///
@ -565,7 +542,6 @@ private:
/// ///
friend class SpellChecker; friend class SpellChecker;
/** The tab folders. /** The tab folders.
*/ */

View File

@ -11,7 +11,16 @@
#include <vector> #include <vector>
#include "xform_helpers.h" #include "xform_helpers.h"
#include <fstream> // ofstream
#include "lyxlex.h"
#include "filedlg.h" // LyXFileDlg
#include "support/FileInfo.h"
#include "support/filetools.h"
#include "lyx_gui_misc.h" // WriteAlert
#include "gettext.h"
using std::ofstream;
using std::pair;
using std::vector; using std::vector;
// Take a string and add breaks so that it fits into a desired label width, w // Take a string and add breaks so that it fits into a desired label width, w
@ -58,3 +67,141 @@ string formatted( string const & sin, int w, int size, int style )
return sout; return sout;
} }
string const browseFile( string const & filename,
string const & title,
string const & pattern,
pair<string,string> const & dir1,
pair<string,string> const & dir2 )
{
string lastPath = ".";
if( !filename.empty() ) lastPath = OnlyPath(filename);
LyXFileDlg fileDlg;
if( !dir1.second.empty() ) {
FileInfo fileInfo( dir1.second );
if( fileInfo.isOK() && fileInfo.isDir() )
fileDlg.SetButton( 0, dir1.first, dir1.second );
}
if( !dir2.second.empty() ) {
FileInfo fileInfo( dir2.second );
if( fileInfo.isOK() && fileInfo.isDir() )
fileDlg.SetButton( 1, dir2.first, dir2.second );
}
bool error = false;
string buf;
do {
string p = fileDlg.Select(title,
lastPath,
pattern, filename );
if (p.empty()) return p;
lastPath = OnlyPath(p);
if (p.find_first_of("#~$% ") != string::npos) {
WriteAlert(_("Filename can't contain any "
"of these characters:"),
_("space, '#', '~', '$' or '%'."));
error = true;
} else {
error = false;
buf = p;
}
} while (error);
return buf;
}
// sorted by hand to prevent LyXLex from complaining on read().
static
keyword_item xformTags[] = {
// { "\\gui_active_tab", FL_LIGHTER_COL1 },
{ "\\gui_background", FL_COL1 },
{ "\\gui_buttonbottom", FL_BOTTOM_BCOL },
{ "\\gui_buttonleft", FL_LEFT_BCOL },
{ "\\gui_buttonright", FL_RIGHT_BCOL },
{ "\\gui_buttontop", FL_TOP_BCOL },
{ "\\gui_inactive", FL_INACTIVE },
{ "\\gui_push_button", FL_YELLOW },
{ "\\gui_selected", FL_MCOL },
{ "\\gui_text", FL_BLACK }
};
static const int xformCount = sizeof(xformTags) / sizeof(keyword_item);
bool XformColor::read(string const & filename)
{
LyXLex lexrc(xformTags, xformCount);
if (!lexrc.setFile(filename))
return false;
while (lexrc.IsOK()) {
int const le = lexrc.lex();
switch (le) {
case LyXLex::LEX_UNDEF:
lexrc.printError("Unknown tag `$$Token'");
continue;
case LyXLex::LEX_FEOF:
continue;
default: break;
}
RGBColor col;
if (!lexrc.next()) break;
col.r = lexrc.GetInteger();
if (!lexrc.next()) break;
col.g = lexrc.GetInteger();
if (!lexrc.next()) break;
col.b = lexrc.GetInteger();
fl_mapcolor(le, col.r, col.g, col.b);
}
return true;
}
bool XformColor::write(string const & filename)
{
ofstream os(filename.c_str());
if (!os)
return false;
os << "### This file is part of\n"
<< "### ========================================================\n"
<< "### LyX, The Document Processor\n"
<< "###\n"
<< "### Copyright 1995 Matthias Ettrich\n"
<< "### Copyright 1995-2000 The LyX Team.\n"
<< "###\n"
<< "### ========================================================\n"
<< "\n"
<< "# This file is written by LyX, if you want to make your own\n"
<< "# modifications you should do them from inside LyX and save\n"
<< "\n";
for (int i = 0; i < xformCount; ++i) {
string const tag = xformTags[i].tag;
int const colorID = xformTags[i].code;
RGBColor color;
fl_getmcolor(colorID, &color.r, &color.g, &color.b);
os << tag << " "
<< color.r << " " << color.g << " " << color.b << "\n";
}
return true;
}

View File

@ -5,10 +5,32 @@
#pragma interface #pragma interface
#endif #endif
#include <utility> // pair
#include <config.h> #include <config.h>
#include "LString.h" #include "LString.h"
#include "Color.h"
// Take a string and add breaks so that it fits into a desired label width, w // Take a string and add breaks so that it fits into a desired label width, w
string formatted( string const &label, int w, int size, int style ); string formatted( string const &label, int w, int size, int style );
/** Launch a file dialog and return the chosen file.
filename: a suggested filename.
title: the title of the dialog.
pattern: *.ps etc.
dir1 = (name, dir), dir2 = (name, dir): extra buttons on the dialog.
*/
string const browseFile( string const & filename,
string const & title,
string const & pattern,
std::pair<string,string> const & dir1,
std::pair<string,string> const & dir2 );
/// struct holding xform-specific colors
struct XformColor : public NamedColor {
int colorID;
XformColor() : NamedColor(), colorID(0) {}
static bool read(string const &);
static bool write(string const &);
};
#endif #endif

View File

@ -42,7 +42,7 @@
#include "language.h" #include "language.h"
#include "ColorHandler.h" #include "ColorHandler.h"
#include "frontends/GUIRunTime.h" #include "frontends/GUIRunTime.h"
#include "frontends/xforms/Color.h" #include "frontends/xforms/xform_helpers.h" // for XformColor
using std::endl; using std::endl;
@ -373,7 +373,7 @@ void LyXGUI::create_forms()
// This is probably as good a time as any to map the xform colours, // This is probably as good a time as any to map the xform colours,
// should a mapping exist. // should a mapping exist.
{ {
string filename = user_lyxdir + "/preferences.xform"; string filename = AddName(user_lyxdir, "preferences.xform");
XformColor::read( filename ); XformColor::read( filename );
} }

View File

@ -402,6 +402,7 @@ void LyX::init(int */*argc*/, char **argv, bool gui)
system_lyxrc = lyxrc; system_lyxrc = lyxrc;
system_formats = formats; system_formats = formats;
system_converters = converters; system_converters = converters;
system_lcolor = lcolor;
// If there is a preferences file we read that instead // If there is a preferences file we read that instead
// of the old lyxrc file. // of the old lyxrc file.

View File

@ -1158,9 +1158,20 @@ void LyXRC::output(ostream & os) const
os << "\n"; os << "\n";
} }
//case RC_SET_COLOR: os << "\n#\n"
// color bindings not written to preference file. << "# COLOR SECTION ###################################\n"
// And we want to be warned about that. (Lgb) << "#\n\n";
case RC_SET_COLOR:
for( int i=0; i<LColor::ignore; ++i ) {
LColor::color lc = static_cast<LColor::color>(i);
if (lcolor.getX11Name(lc) !=
system_lcolor.getX11Name(lc)) {
os << "\\set_color \"" << lcolor.getX11Name(lc)
<< "\"\n";
}
}
os << "\n#\n" os << "\n#\n"
<< "# PRINTER SECTION ###################################\n" << "# PRINTER SECTION ###################################\n"

View File

@ -1135,3 +1135,151 @@ void removeAutosaveFile(string const & filename)
} }
} }
} }
bool WriteableDir(string const & name, string & errorMessage)
{
errorMessage.erase();
if (!AbsolutePath(name)) {
errorMessage = N_("The absolute path is required.");
return false;
}
FileInfo const tp(name);
if (!tp.isDir()) {
errorMessage = N_("Directory does not exist.");
return false;
}
if (!tp.writable()) {
errorMessage = N_("Cannot write to this directory.");
return false;
}
return true;
}
bool ReadableDir(string const & name, string & errorMessage)
{
errorMessage.erase();
if (!AbsolutePath(name)) {
errorMessage = N_("The absolute path is required.");
return false;
}
FileInfo const tp(name);
if (!tp.isDir()) {
errorMessage = N_("Directory does not exist.");
return false;
}
if (!tp.readable()) {
errorMessage = N_("Cannot read this directory.");
return false;
}
return true;
}
bool WriteableFile(string const & name, string & errorMessage)
{
// A writeable file is either:
// * An existing file to which we have write access, or
// * A file that doesn't yet exist but that would exist in a writeable
// directory.
errorMessage.erase();
if (name.empty()) {
errorMessage = N_("No file input.");
return false;
}
string const dir = OnlyPath(name);
if (!AbsolutePath(dir)) {
errorMessage = N_("The absolute path is required.");
return false;
}
FileInfo d(name);
if (!d.isDir()) {
d.newFile(dir);
}
if (!d.isDir()) {
errorMessage = N_("Directory does not exist.");
return false;
}
if (!d.writable()) {
errorMessage = N_("Cannot write to this directory.");
return false;
}
FileInfo f(name);
if (dir == name || f.isDir()) {
errorMessage = N_("A file is required, not a directory.");
return false;
}
if (f.exist() && !f.writable()) {
errorMessage = N_("Cannot write to this file.");
return false;
}
return true;
}
bool ReadableFile(string const & name, string & errorMessage)
{
errorMessage.erase();
if (name.empty()) {
errorMessage = N_("No file input.");
return false;
}
string const dir = OnlyPath(name);
if (!AbsolutePath(dir)) {
errorMessage = N_("The absolute path is required.");
return false;
}
FileInfo d(name);
if (!d.isDir()) {
d.newFile(dir);
}
if (!d.isDir()) {
errorMessage = N_("Directory does not exist.");
return false;
}
if (!d.readable()) {
errorMessage = N_("Cannot read from this directory.");
return false;
}
FileInfo f(name);
if (dir == name || f.isDir()) {
errorMessage = N_("A file is required, not a directory.");
return false;
}
if (!f.exist()) {
errorMessage = N_("File does not exist.");
return false;
}
if (!f.readable()) {
errorMessage = N_("Cannot read from this file.");
return false;
}
return true;
}

View File

@ -199,10 +199,22 @@ string const ReplaceEnvironmentPath(string const & path);
Returns true if successful */ Returns true if successful */
bool LyXReadLink(string const & file, string & Link); bool LyXReadLink(string const & file, string & Link);
/* Uses kpsewhich to find tex files */ /// Uses kpsewhich to find tex files
string const findtexfile(string const & fil, string const & format); string const findtexfile(string const & fil, string const & format);
/* remove the autosave-file and give a Message if it can't be done */ /// remove the autosave-file and give a Message if it can't be done
void removeAutosaveFile(string const & filename); void removeAutosaveFile(string const & filename);
/** Perform some quite detailed tests to ascertain whether the directory or
file is readable or writeable. If not, then an error message is returned.
*/
///
bool WriteableDir(string const & dir, string & errorMessage);
///
bool ReadableDir(string const & dir, string & errorMessage);
///
bool WriteableFile(string const & file, string & errorMessage);
///
bool ReadableFile(string const & file, string & errorMessage);
#endif #endif

View File

@ -1262,7 +1262,6 @@ void LyXTabular::OldFormatRead(LyXLex & lex, string const & fl)
int e = 0; int e = 0;
int f = 0; int f = 0;
int g = 0; int g = 0;
int h = 0;
istream & is = lex.getStream(); istream & is = lex.getStream();
string s(fl); string s(fl);
@ -1314,7 +1313,7 @@ void LyXTabular::OldFormatRead(LyXLex & lex, string const & fl)
endfoot = c; endfoot = c;
endlastfoot = d; endlastfoot = d;
for (i = 0; i < rows_; ++i) { for (i = 0; i < rows_; ++i) {
a = b = c = d = e = f = g = h = 0; a = b = c = d = e = f = g = 0;
is >> a >> b >> c >> d; is >> a >> b >> c >> d;
row_info[i].top_line = a; row_info[i].top_line = a;
row_info[i].bottom_line = b; row_info[i].bottom_line = b;