/** * \file qt2/lyx_gui.C * This file is part of LyX, the document processor. * Licence details can be found in the file COPYING. * * \author unknown * \author John Levon * * Full author contact details are available in file CREDITS */ #include #ifdef __GNUG__ #pragma implementation #endif #include "support/lyxlib.h" #include "support/os.h" #include "support/filetools.h" #include "support/lstrings.h" #include "debug.h" #include "gettext.h" #include "lyx_gui.h" #include "lyx_main.h" #include "lyxrc.h" #include "lyxfont.h" // FIXME: move this stuff out again #include "bufferlist.h" #include "lyxfunc.h" #include "lyxserver.h" #include "BufferView.h" // Dear Lord, deliver us from Evil, // aka the Qt headers #include #include #include #include #include "QtView.h" #include "QLImage.h" #include "qfont_loader.h" #include "io_callback.h" #include #include #include #include #ifndef CXX_GLOBAL_CSTD using std::exit; #endif using std::vector; using std::map; using std::endl; extern BufferList bufferlist; namespace { float getDPI() { QWidget w; QPaintDeviceMetrics pdm(&w); return 0.5 * (pdm.logicalDpiX() + pdm.logicalDpiY()); } map io_callbacks; } // namespace anon // FIXME: wrong place ! LyXServer * lyxserver; #ifdef Q_WS_X11 extern bool lyxX11EventFilter(XEvent * xev); #endif class LQApplication : public QApplication { public: LQApplication(int &argc, char **argv); ~LQApplication(); #ifdef Q_WS_X11 bool x11EventFilter (XEvent * ev) { return lyxX11EventFilter(ev); } #endif }; LQApplication::LQApplication(int &argc, char **argv) : QApplication( argc, argv ) {} LQApplication::~LQApplication() {} void lyx_gui::parse_init(int & argc, char * argv[]) { static LQApplication a(argc, argv); using namespace grfx; Image::newImage = boost::bind(&QLImage::newImage); Image::loadableFormats = boost::bind(&QLImage::loadableFormats); // needs to be done before reading lyxrc lyxrc.dpi = getDPI(); } void lyx_gui::parse_lyxrc() { } void lyx_gui::start(string const & batch, vector const & files) { // initial geometry int xpos = -1; int ypos = -1; unsigned int width = 690; unsigned int height = 510; QtView view(width, height); view.show(xpos, ypos, "LyX"); view.init(); Buffer * last = 0; // FIXME: some code below needs moving lyxserver = new LyXServer(&view.getLyXFunc(), lyxrc.lyxpipes); vector::const_iterator cit = files.begin(); vector::const_iterator end = files.end(); for (; cit != end; ++cit) { Buffer * b = bufferlist.loadLyXFile(*cit); if (b) { last = b; } } // switch to the last buffer successfully loaded if (last) { view.view()->buffer(last); } // handle the batch commands the user asked for if (!batch.empty()) { view.getLyXFunc().dispatch(batch); } qApp->exec(); // FIXME delete lyxserver; } void lyx_gui::exit() { qApp->exit(0); } string const lyx_gui::hexname(LColor::color col) { QColor color(lcolor.getX11Name(col).c_str()); return ltrim(color.name().latin1(), "#"); } void lyx_gui::update_color(LColor::color) { // no need } void lyx_gui::update_fonts() { fontloader.update(); } bool lyx_gui::font_available(LyXFont const & font) { return fontloader.available(font); } void lyx_gui::set_read_callback(int fd, LyXComm * comm) { io_callbacks[fd] = new io_callback(fd, comm); } void lyx_gui::remove_read_callback(int fd) { map::iterator it = io_callbacks.find(fd); if (it != io_callbacks.end()) { delete it->second; io_callbacks.erase(it); } }