]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/qt_helpers.h
do what the FIXME suggested
[lyx.git] / src / frontends / qt4 / qt_helpers.h
index 463e4eb7c4f77f42b4b1c2a97757283f63f016dc..c2437deb10b213103c1f34ca24a132cadb60c31b 100644 (file)
@@ -5,6 +5,7 @@
  * Licence details can be found in the file COPYING.
  *
  * \author Dekel Tsur
+ * \author Richard Heck
  *
  * Full author contact details are available in file CREDITS.
  */
 #ifndef QTHELPERS_H
 #define QTHELPERS_H
 
-#include "lyxlength.h"
-#include "support/docstring.h"
-
-#include <QChar>
-#include <QString>
+#include "Length.h"
+#include "support/qstring_helpers.h"
+#include "support/strfwd.h"
 
 #include <vector>
-#include <utility>
-#include <boost/assert.hpp>
 
 class QComboBox;
 class QLineEdit;
+class QCheckBox;
+class QString;
+class QWidget;
 
 class LengthCombo;
 
 namespace lyx {
 
-std::string makeFontName(std::string const & family, std::string const & foundry);
+namespace support { class FileFilterList; }
 
-std::pair<std::string,std::string> parseFontName(std::string const & name);
+namespace frontend {
 
-/// method to get a LyXLength from widgets (LengthCombo)
+/// method to get a Length from widgets (LengthCombo)
 std::string widgetsToLength(QLineEdit const * input, LengthCombo const * combo);
-/// method to get a LyXLength from widgets (QComboBox)
-LyXLength widgetsToLength(QLineEdit const * input, QComboBox const * combo);
+/// method to get a Length from widgets (QComboBox)
+Length widgetsToLength(QLineEdit const * input, QComboBox const * combo);
 
-/// method to set widgets from a LyXLength
+//FIXME It would be nice if defaultUnit were a default argument
+/// method to set widgets from a Length
 void lengthToWidgets(QLineEdit * input, LengthCombo * combo,
-       std::string const & len, LyXLength::UNIT default_unit);
-
-/// format a string to the given width
-docstring const formatted(docstring const & text, int w = 80);
-
-
-/**
- * toqstr - convert a UTF8 encoded char * into a QString
- *
- * This should not be used, since all possibly non-ASCII stuff should be
- * stored in a docstring.
- */
-inline QString const toqstr(char const * str)
-{
-       return QString::fromUtf8(str);
-}
-
-
-/**
- * toqstr - convert a UTF8 encoded std::string into a QString
- *
- * This should not be used, since all possibly non-ASCII stuff should be
- * stored in a docstring.
- */
-inline QString const toqstr(std::string const & str)
-{
-       return toqstr(str.c_str());
-}
-
-
-/**
- * Convert a QChar into a UCS4 character.
- * This is a hack (it does only make sense for the common part of the UCS4
- * and UTF16 encodings) and should not be used.
- * This does only exist because of performance reasons (a real conversion
- * using iconv is too slow on windows).
- */
-inline char_type const qchar_to_ucs4(QChar const & qchar)
-{
-       return static_cast<char_type>(qchar.unicode());
-}
-
-
-/**
- * Convert a UCS4 character into a QChar.
- * This is a hack (it does only make sense for the common part of the UCS4
- * and UTF16 encodings) and should not be used.
- * This does only exist because of performance reasons (a real conversion
- * using iconv is too slow on windows).
- */
-inline QChar const ucs4_to_qchar(char_type const ucs4)
-{
-       // FIXME: The following cast is not a real conversion but it work
-       // for the ucs2 subrange of unicode. Instead of an assertion we should
-       // return some special characters that indicates that its display is
-       // not supported.
-       BOOST_ASSERT(ucs4 < 65536);
-       return QChar(static_cast<unsigned short>(ucs4));
-}
-
-
-/**
- * toqstr - convert a UCS4 encoded docstring into a QString
- *
- * This is the preferred method of converting anything that possibly
- * contains non-ASCII stuff to QString.
- */
-#if QT_VERSION >= 0x040200
-inline QString const toqstr(docstring const & ucs4)
-{
-       // If possible we let qt do the work, since this version does not
-       // need to be superfast.
-       return QString::fromUcs4(reinterpret_cast<uint const *>(ucs4.data()), ucs4.length());
-}
-#else
-QString const toqstr(docstring const & ucs4);
-#endif
-
-
-/**
- * ucs4_to_qstring - convert a UCS4 encoded char_type * into a QString
- *
- * This is a hack for the painter and font metrics and should not be used
- * elsewhere. Since it uses ucs4_to_qchar it has the same limitations.
- */
-inline void ucs4_to_qstring(char_type const * str, size_t ls, QString & s)
-{
-       int i = static_cast<int>(ls);
-       s.resize(i);
-       for (; --i >= 0;)
-               s[i] = ucs4_to_qchar(str[i]);
-}
+Length const & len, Length::UNIT default_unit);
+/// method to set widgets from a string
+void lengthToWidgets(QLineEdit * input, LengthCombo * combo,
+std::string const & len, Length::UNIT default_unit);
+/// method to set widgets from a Length with optional "auto" if zero
+void lengthAutoToWidgets(QLineEdit * input, LengthCombo * combo,
+Length const & len, Length::UNIT defaultUnit);
 
+/// colors a widget red if invalid
+void setValid(QWidget * widget, bool valid);
 
-/**
- * qstring_to_ucs4 - convert a QString into a UCS4 encoded docstring
- *
- * This is the preferred method of converting anything that possibly
- * contains non-ASCII stuff to docstring.
- */
-docstring const qstring_to_ucs4(QString const & qstr);
+} // namespace frontend
 
 
 /**
- * qt_ - i18nize string and convert to QString
+* qt_ - i18nize string and convert to QString
  *
  * Use this in qt4/ instead of _()
  */
@@ -158,14 +70,81 @@ QString const qt_(char const * str, const char * comment = 0);
  */
 QString const qt_(std::string const & str);
 
-
-/**
- * fromqstr - convert a QString into a UTF8 encoded std::string
- *
- * This should not be used except for output to lyxerr, since all possibly
- * non-ASCII stuff should be stored in a docstring.
+///
+typedef std::pair<docstring, std::string> LanguagePair;
+
+/** If the caller is the character dialog, add "No change" and "Reset"
+*  to the vector.
+*/
+std::vector<LanguagePair> const getLanguageData(bool character_dlg);
+
+/** 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.
+*/
+docstring browseFile(docstring const & filename,
+       docstring const & title,
+       support::FileFilterList const & filters,
+       bool save = false,
+       docstring const & label1 = docstring(),
+       docstring const & dir1 = docstring(),
+       docstring const & label2 = docstring(),
+       docstring const & dir2 = docstring());
+
+
+/** Wrapper around browseFile which tries to provide a filename
+       relative to relpath.  If the relative path is of the form "foo.txt"
+       or "bar/foo.txt", then it is returned as relative. OTOH, if it is
+       of the form "../baz/foo.txt", an absolute path is returned. This is
+       intended to be useful for insets which encapsulate files/
+*/
+docstring browseRelFile(docstring const & filename,
+       docstring const & refpath,
+       docstring const & title,
+       support::FileFilterList const & filters,
+       bool save = false,
+       docstring const & label1 = docstring(),
+       docstring const & dir1 = docstring(),
+       docstring const & label2 = docstring(),
+       docstring const & dir2 = docstring());
+
+
+/** Wrapper around browseFile which tries to provide a filename
+*  relative to the user or system directory. The dir, name and ext
+*  parameters have the same meaning as in the
+*  support::LibFileSearch function.
+*/
+docstring browseLibFile(docstring const & dir,
+       docstring const & name,
+       docstring const & ext,
+       docstring const & title,
+       support::FileFilterList const & filters);
+
+
+/** Launch a file dialog and return the chosen directory.
+       pathname: a suggested pathname.
+       title: the title of the dialog.
+       dir1 = (name, dir), dir2 = (name, dir): extra buttons on the dialog.
+*/
+docstring browseDir(docstring const & pathname,
+       docstring const & title,
+       docstring const & label1 = docstring(),
+       docstring const & dir1 = docstring(),
+       docstring const & label2 = docstring(),
+       docstring const & dir2 = docstring());
+
+
+/** Build filelists of all availabe bst/cls/sty-files. Done through
+*  kpsewhich and an external script, saved in *Files.lst.
+*/
+void rescanTexStyles();
+
+/** Fill \c contents from one of the three texfiles.
+ *  Each entry in the file list is returned as a name_with_path
  */
-std::string const fromqstr(QString const & str);
+void getTexFileList(std::string const & filename, std::vector<std::string> & contents);
 
 } // namespace lyx