mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-27 03:36:39 +00:00
This commit introduces frontends/Application.[Ch] and makes qt4/GuiApplication (renamed from qt4/Application) derive from it. Most of the code in qt4/lyx_gui.C has been transferred either to Application or to qt4/GuiApplication. Application handles unique instances of LyXFunc, LyXServer and LyXServerSocket.
Most of qt3 and gtk should stay compilable except for LyXView.h because the LyXFunc instance has been transferred to Application. * frontends/Application: new class aimed to be the one unique interface between the frontend and the kernel. Contains one global pointer to the unique instanciation theApp. * frontends/qt4/GuiApplication: renamed from qt4/Application, the qt4 specialisation of the Application class. Contains one global pointer to the unique instanciation guiApp (equal to theApp but pointing to a GuiApplication instead). * frontends/qt4/lyx_gui.C: most of the code has been moved to Application and GuiApplication All other file: adapted to new API. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@15114 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
de161c40b1
commit
3f0fadc48a
104
src/frontends/Application.C
Normal file
104
src/frontends/Application.C
Normal file
@ -0,0 +1,104 @@
|
||||
/**
|
||||
* \file frontend/Application.C
|
||||
* This file is part of LyX, the document processor.
|
||||
* Licence details can be found in the file COPYING.
|
||||
*
|
||||
* \author Abdelrazak Younes
|
||||
*
|
||||
* Full author contact details are available in file CREDITS.
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#include "Application.h"
|
||||
|
||||
#include "funcrequest.h"
|
||||
#include "LyXAction.h"
|
||||
#include "lyxrc.h"
|
||||
#include "LyXView.h"
|
||||
|
||||
#include "support/lstrings.h"
|
||||
#include "support/os.h"
|
||||
#include "support/package.h"
|
||||
|
||||
#include <boost/scoped_ptr.hpp>
|
||||
|
||||
using lyx::support::package;
|
||||
|
||||
// FIXME: replace all occurence of lyxserver with theApp->server().
|
||||
LyXServer * lyxserver;
|
||||
// FIXME: replace all occurence of lyxsocket with theApp->socket().
|
||||
LyXServerSocket * lyxsocket;
|
||||
|
||||
namespace lyx {
|
||||
namespace frontend {
|
||||
|
||||
|
||||
Application::Application(int & argc, char ** argv)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
LyXFunc & Application::lyxFunc()
|
||||
{
|
||||
return *lyxfunc_.get();
|
||||
}
|
||||
|
||||
|
||||
LyXFunc const & Application::lyxFunc() const
|
||||
{
|
||||
return *lyxfunc_.get();
|
||||
}
|
||||
|
||||
|
||||
LyXServer & Application::server()
|
||||
{
|
||||
return *lyx_server_.get();
|
||||
}
|
||||
|
||||
|
||||
LyXServer const & Application::server() const
|
||||
{
|
||||
return *lyx_server_.get();
|
||||
}
|
||||
|
||||
|
||||
LyXServerSocket & Application::socket()
|
||||
{
|
||||
return *lyx_socket_.get();
|
||||
}
|
||||
|
||||
|
||||
LyXServerSocket const & Application::socket() const
|
||||
{
|
||||
return *lyx_socket_.get();
|
||||
}
|
||||
|
||||
|
||||
void Application::setBufferView(BufferView * buffer_view)
|
||||
{
|
||||
buffer_view_ = buffer_view;
|
||||
}
|
||||
|
||||
|
||||
int Application::start(std::string const & batch)
|
||||
{
|
||||
lyx_server_.reset(new LyXServer(lyxfunc_.get(), lyxrc.lyxpipes));
|
||||
lyx_socket_.reset(new LyXServerSocket(lyxfunc_.get(),
|
||||
lyx::support::os::internal_path(package().temp_dir() + "/lyxsocket")));
|
||||
|
||||
// FIXME: these two lines should disappear soon (Abdel 20/09/71)
|
||||
lyxserver = lyx_server_.get();
|
||||
lyxsocket = lyx_socket_.get();
|
||||
|
||||
// handle the batch commands the user asked for
|
||||
if (!batch.empty()) {
|
||||
lyxfunc_->dispatch(lyxaction.lookupFunc(batch));
|
||||
}
|
||||
|
||||
return exec();
|
||||
}
|
||||
|
||||
|
||||
} // namespace frontend
|
||||
} // namespace lyx
|
89
src/frontends/Application.h
Normal file
89
src/frontends/Application.h
Normal file
@ -0,0 +1,89 @@
|
||||
/**
|
||||
* \file frontend/Application.h
|
||||
* This file is part of LyX, the document processor.
|
||||
* Licence details can be found in the file COPYING.
|
||||
*
|
||||
* \author Abdelrazak Younes
|
||||
*
|
||||
* Full author contact details are available in file CREDITS.
|
||||
*/
|
||||
|
||||
#ifndef LYX_APPLICATION_H
|
||||
#define LYX_APPLICATION_H
|
||||
|
||||
#include "lyxfunc.h"
|
||||
#include "lyxserver.h"
|
||||
#include "lyxsocket.h"
|
||||
|
||||
#include <boost/scoped_ptr.hpp>
|
||||
|
||||
#include <string>
|
||||
|
||||
class BufferView;
|
||||
class LyXView;
|
||||
|
||||
namespace lyx {
|
||||
namespace frontend {
|
||||
|
||||
//class GuiWorkArea;
|
||||
class Gui;
|
||||
|
||||
|
||||
/// The main application class
|
||||
/**
|
||||
There should be only one instance of this class. No Qt object
|
||||
initialisation should be done before the instanciation of this class.
|
||||
|
||||
\todo The work areas handling could be moved to a base virtual class
|
||||
comon to all frontends.
|
||||
*/
|
||||
class Application
|
||||
{
|
||||
public:
|
||||
Application(int & argc, char ** argv);
|
||||
|
||||
int start(std::string const & batch);
|
||||
///
|
||||
virtual Gui & gui() = 0;
|
||||
///
|
||||
virtual int const exec() = 0;
|
||||
///
|
||||
virtual void exit(int status) = 0;
|
||||
|
||||
///
|
||||
LyXFunc & lyxFunc();
|
||||
LyXFunc const & lyxFunc() const;
|
||||
///
|
||||
LyXServer & server();
|
||||
LyXServer const & server() const;
|
||||
///
|
||||
LyXServerSocket & socket();
|
||||
LyXServerSocket const & socket() const;
|
||||
///
|
||||
void setBufferView(BufferView * buffer_view);
|
||||
|
||||
protected:
|
||||
///
|
||||
BufferView * buffer_view_;
|
||||
|
||||
// FIXME: lyxfunc_ should be private. But the actual construction is done in
|
||||
// GuiApplication for now.
|
||||
|
||||
/// our function handler
|
||||
boost::scoped_ptr<LyXFunc> lyxfunc_;
|
||||
|
||||
private:
|
||||
///
|
||||
boost::scoped_ptr<LyXServer> lyx_server_;
|
||||
///
|
||||
boost::scoped_ptr<LyXServerSocket> lyx_socket_;
|
||||
|
||||
}; // Application
|
||||
|
||||
} // namespace frontend
|
||||
} // namespace lyx
|
||||
|
||||
extern lyx::frontend::Application * theApp;
|
||||
|
||||
|
||||
#endif // LYX_APPLICATION_H
|
@ -13,6 +13,7 @@
|
||||
#ifndef LYXVIEW_H
|
||||
#define LYXVIEW_H
|
||||
|
||||
#include "frontends/Application.h"
|
||||
#include "frontends/Toolbars.h"
|
||||
|
||||
#include <boost/scoped_ptr.hpp>
|
||||
@ -87,9 +88,9 @@ public:
|
||||
Buffer * buffer() const;
|
||||
|
||||
/// return the LyX function handler for this view
|
||||
LyXFunc & getLyXFunc() { return *lyxfunc_.get(); }
|
||||
LyXFunc & getLyXFunc() { return theApp->lyxFunc(); }
|
||||
///
|
||||
LyXFunc const & getLyXFunc() const { return *lyxfunc_.get(); }
|
||||
LyXFunc const & getLyXFunc() const { return theApp->lyxFunc(); }
|
||||
|
||||
/// return the toolbar for this view
|
||||
Toolbars & getToolbars() { return *toolbars_.get(); }
|
||||
|
@ -164,6 +164,8 @@ void WorkArea::setBufferView(BufferView * buffer_view)
|
||||
lyx_view_.disconnectBufferView();
|
||||
}
|
||||
|
||||
theApp->setBufferView(buffer_view);
|
||||
|
||||
hideCursor();
|
||||
buffer_view_ = buffer_view;
|
||||
toggleCursor();
|
||||
|
@ -1,5 +1,5 @@
|
||||
/**
|
||||
* \file qt4/Application.C
|
||||
* \file qt4/GuiApplication.C
|
||||
* This file is part of LyX, the document processor.
|
||||
* Licence details can be found in the file COPYING.
|
||||
*
|
||||
@ -12,42 +12,68 @@
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#include "Application.h"
|
||||
#include "GuiApplication.h"
|
||||
|
||||
#include "GuiView.h"
|
||||
#include "GuiWorkArea.h"
|
||||
|
||||
#include "qt_helpers.h"
|
||||
#include "QLImage.h"
|
||||
|
||||
#include "BufferView.h"
|
||||
#include "debug.h"
|
||||
|
||||
#include "graphics/LoaderQueue.h"
|
||||
|
||||
#include "support/lstrings.h"
|
||||
#include "support/os.h"
|
||||
#include "support/package.h"
|
||||
|
||||
#include "lyx_main.h"
|
||||
#include "lyxrc.h"
|
||||
#include "debug.h"
|
||||
|
||||
#include <QApplication>
|
||||
#include <QEventLoop>
|
||||
#include <QTranslator>
|
||||
#include <QTextCodec>
|
||||
#include <QClipboard>
|
||||
#include <QEventLoop>
|
||||
#include <QLocale>
|
||||
#include <QLibraryInfo>
|
||||
#include <QTextCodec>
|
||||
#include <QTranslator>
|
||||
|
||||
#ifdef Q_WS_X11
|
||||
#include <X11/Xlib.h>
|
||||
#endif
|
||||
|
||||
#include <boost/bind.hpp>
|
||||
|
||||
using lyx::support::subst;
|
||||
|
||||
using std::string;
|
||||
using std::endl;
|
||||
|
||||
// in QLyXKeySym.C
|
||||
extern void initEncodings();
|
||||
|
||||
///////////////////////////////////////////////////////////////
|
||||
// You can find other X11 and MACX specific stuff
|
||||
// at the end of this file...
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
namespace {
|
||||
|
||||
int getDPI()
|
||||
{
|
||||
QWidget w;
|
||||
return int(0.5 * (w.logicalDpiX() + w.logicalDpiY()));
|
||||
}
|
||||
|
||||
} // namespace anon
|
||||
|
||||
|
||||
namespace lyx {
|
||||
namespace frontend {
|
||||
|
||||
Application::Application(int & argc, char ** argv)
|
||||
: QApplication(argc, argv), buffer_view_(0)
|
||||
GuiApplication::GuiApplication(int & argc, char ** argv)
|
||||
: QApplication(argc, argv), Application(argc, argv)
|
||||
{
|
||||
#ifdef Q_WS_X11
|
||||
// doubleClickInterval() is 400 ms on X11 witch is just too long.
|
||||
@ -62,19 +88,121 @@ Application::Application(int & argc, char ** argv)
|
||||
NewAEEventHandlerUPP(handleOpenDocuments),
|
||||
0, false);
|
||||
#endif
|
||||
|
||||
// install translation file for Qt built-in dialogs
|
||||
// These are only installed since Qt 3.2.x
|
||||
QTranslator qt_trans;
|
||||
QString language_name = QString("qt_") + QLocale::system().name();
|
||||
language_name.truncate(5);
|
||||
if (qt_trans.load(language_name,
|
||||
QLibraryInfo::location(QLibraryInfo::TranslationsPath)))
|
||||
{
|
||||
qApp->installTranslator(&qt_trans);
|
||||
// even if the language calls for RtL, don't do that
|
||||
qApp->setLayoutDirection(Qt::LeftToRight);
|
||||
lyxerr[Debug::GUI]
|
||||
<< "Successfully installed Qt translations for locale "
|
||||
<< fromqstr(language_name) << std::endl;
|
||||
} else
|
||||
lyxerr[Debug::GUI]
|
||||
<< "Could not find Qt translations for locale "
|
||||
<< fromqstr(language_name) << std::endl;
|
||||
|
||||
/*#ifdef Q_WS_MACX
|
||||
// These translations are meant to break Qt/Mac menu merging
|
||||
// algorithm on some entries. It lists the menu names that
|
||||
// should not be moved to the LyX menu
|
||||
QTranslator aqua_trans(0);
|
||||
aqua_trans.insert(QTranslatorMessage("QMenuBar", "Setting", 0,
|
||||
"do_not_merge_me"));
|
||||
aqua_trans.insert(QTranslatorMessage("QMenuBar", "Config", 0,
|
||||
"do_not_merge_me"));
|
||||
aqua_trans.insert(QTranslatorMessage("QMenuBar", "Options", 0,
|
||||
"do_not_merge_me"));
|
||||
aqua_trans.insert(QTranslatorMessage("QMenuBar", "Setup", 0,
|
||||
"do_not_merge_me"));
|
||||
|
||||
qApp->installTranslator(&aqua_trans);
|
||||
#endif
|
||||
*/
|
||||
using namespace lyx::graphics;
|
||||
|
||||
Image::newImage = boost::bind(&QLImage::newImage);
|
||||
Image::loadableFormats = boost::bind(&QLImage::loadableFormats);
|
||||
|
||||
// needs to be done before reading lyxrc
|
||||
lyxrc.dpi = getDPI();
|
||||
|
||||
LoaderQueue::setPriority(10,100);
|
||||
}
|
||||
|
||||
|
||||
void Application::setBufferView(BufferView * buffer_view)
|
||||
int const GuiApplication::exec()
|
||||
{
|
||||
buffer_view_ = buffer_view;
|
||||
return QApplication::exec();
|
||||
}
|
||||
|
||||
|
||||
void GuiApplication::exit(int status)
|
||||
{
|
||||
QApplication::exit(status);
|
||||
}
|
||||
|
||||
|
||||
// FIXME: this whole method needs to be moved to Application.
|
||||
LyXView & GuiApplication::createView(unsigned int width,
|
||||
unsigned int height,
|
||||
int posx, int posy,
|
||||
bool maximize)
|
||||
{
|
||||
// this can't be done before because it needs the Languages object
|
||||
initEncodings();
|
||||
|
||||
int view_id = gui().newView(width, height);
|
||||
GuiView & view = static_cast<GuiView &> (gui().view(view_id));
|
||||
|
||||
lyxfunc_.reset(new LyXFunc(&view));
|
||||
|
||||
// FIXME: for now we assume that there is only one LyXView with id = 0.
|
||||
/*int workArea_id_ =*/ gui().newWorkArea(width, height, 0);
|
||||
//WorkArea * workArea_ = & theApp->gui().workArea(workArea_id_);
|
||||
|
||||
LyX::ref().addLyXView(&view);
|
||||
|
||||
view.init();
|
||||
|
||||
// FIXME: put this initialisation code in GuiView accessible via
|
||||
// a pure virtual method in LyXView.
|
||||
|
||||
// only true when the -geometry option was NOT used
|
||||
if (width != 0 && height != 0) {
|
||||
if (posx != -1 && posy != -1) {
|
||||
#ifdef Q_OS_WIN32
|
||||
// FIXME: use only setGeoemtry when Trolltech has
|
||||
// fixed the qt4/X11 bug
|
||||
view.setGeometry(posx, posy,width, height);
|
||||
#else
|
||||
view.resize(width, height);
|
||||
view.move(posx, posy);
|
||||
#endif
|
||||
} else {
|
||||
view.resize(width, height);
|
||||
}
|
||||
|
||||
if (maximize)
|
||||
view.setWindowState(Qt::WindowMaximized);
|
||||
}
|
||||
|
||||
view.show();
|
||||
|
||||
return view;
|
||||
}
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
// X11 specific stuff goes here...
|
||||
#ifdef Q_WS_X11
|
||||
bool Application::x11EventFilter(XEvent * xev)
|
||||
bool GuiApplication::x11EventFilter(XEvent * xev)
|
||||
{
|
||||
switch (xev->type) {
|
||||
case SelectionRequest:
|
||||
@ -101,6 +229,7 @@ bool Application::x11EventFilter(XEvent * xev)
|
||||
|
||||
#ifdef Q_WS_MACX
|
||||
namespace{
|
||||
|
||||
OSErr checkAppleEventForMissingParams(const AppleEvent& theAppleEvent)
|
||||
{
|
||||
DescType returnedType;
|
||||
@ -117,9 +246,10 @@ OSErr checkAppleEventForMissingParams(const AppleEvent& theAppleEvent)
|
||||
return err;
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
OSErr Application::handleOpenDocuments(const AppleEvent* inEvent,
|
||||
OSErr GuiApplication::handleOpenDocuments(const AppleEvent* inEvent,
|
||||
AppleEvent* /*reply*/, long /*refCon*/)
|
||||
{
|
||||
QString s_arg;
|
||||
@ -165,7 +295,7 @@ OSErr Application::handleOpenDocuments(const AppleEvent* inEvent,
|
||||
return err;
|
||||
}
|
||||
|
||||
bool Application::macEventFilter(EventRef event)
|
||||
bool GuiApplication::macEventFilter(EventRef event)
|
||||
{
|
||||
if (GetEventClass(event) == kEventClassAppleEvent) {
|
||||
EventRecord eventrec;
|
@ -1,5 +1,5 @@
|
||||
/**
|
||||
* \file qt4/Application.h
|
||||
* \file qt4/GuiApplication.h
|
||||
* This file is part of LyX, the document processor.
|
||||
* Licence details can be found in the file COPYING.
|
||||
*
|
||||
@ -10,12 +10,14 @@
|
||||
* Full author contact details are available in file CREDITS.
|
||||
*/
|
||||
|
||||
#ifndef LYX_APPLICATION_H
|
||||
#define LYX_APPLICATION_H
|
||||
#ifndef QT4_APPLICATION_H
|
||||
#define QT4_APPLICATION_H
|
||||
|
||||
#include "GuiImplementation.h"
|
||||
#include "FontLoader.h"
|
||||
|
||||
#include "frontends/Application.h"
|
||||
|
||||
#include <QApplication>
|
||||
|
||||
///////////////////////////////////////////////////////////////
|
||||
@ -41,22 +43,26 @@ initialisation should be done before the instanciation of this class.
|
||||
\todo The work areas handling could be moved to a base virtual class
|
||||
comon to all frontends.
|
||||
*/
|
||||
class Application : public QApplication
|
||||
class GuiApplication : public QApplication, public Application
|
||||
{
|
||||
public:
|
||||
Application(int & argc, char ** argv);
|
||||
GuiApplication(int & argc, char ** argv);
|
||||
|
||||
/// Method inherited from \c Application class
|
||||
//@{
|
||||
virtual int const exec();
|
||||
virtual Gui & gui() { return gui_; }
|
||||
virtual void exit(int status);
|
||||
//@}
|
||||
|
||||
//
|
||||
Gui & gui() { return gui_; }
|
||||
///
|
||||
FontLoader & fontLoader() { return font_loader_; }
|
||||
|
||||
///
|
||||
void setBufferView(BufferView * buffer_view);
|
||||
LyXView & createView(unsigned int width, unsigned int height,
|
||||
int posx, int posy, bool maximize);
|
||||
|
||||
private:
|
||||
///
|
||||
BufferView * buffer_view_;
|
||||
|
||||
///
|
||||
GuiImplementation gui_;
|
||||
|
||||
@ -76,12 +82,12 @@ private:
|
||||
static pascal OSErr handleOpenDocuments(
|
||||
const AppleEvent* inEvent, AppleEvent*, long);
|
||||
#endif
|
||||
}; // Application
|
||||
}; // GuiApplication
|
||||
|
||||
} // namespace frontend
|
||||
} // namespace lyx
|
||||
|
||||
extern lyx::frontend::Application * theApp;
|
||||
extern lyx::frontend::GuiApplication * guiApp;
|
||||
|
||||
|
||||
#endif // LYX_APPLICATION_H
|
||||
#endif // QT4_APPLICATION_H
|
@ -13,7 +13,7 @@
|
||||
|
||||
#include "GuiWorkArea.h"
|
||||
|
||||
#include "Application.h"
|
||||
#include "GuiApplication.h"
|
||||
#include "ColorCache.h"
|
||||
#include "QLPainter.h"
|
||||
#include "QLyXKeySym.h"
|
||||
|
@ -18,7 +18,7 @@
|
||||
#include "ColorCache.h"
|
||||
#include "FontLoader.h"
|
||||
|
||||
#include "Application.h"
|
||||
#include "GuiApplication.h"
|
||||
#include "qt_helpers.h"
|
||||
|
||||
#include "debug.h"
|
||||
@ -202,8 +202,8 @@ void QLPainter::smallCapsText(int x, int y,
|
||||
LyXFont smallfont(f);
|
||||
smallfont.decSize().decSize().setShape(LyXFont::UP_SHAPE);
|
||||
|
||||
QFont const & qfont = theApp->fontLoader().get(f);
|
||||
QFont const & qsmallfont = theApp->fontLoader().get(smallfont);
|
||||
QFont const & qfont = guiApp->fontLoader().get(f);
|
||||
QFont const & qsmallfont = guiApp->fontLoader().get(smallfont);
|
||||
QFontMetrics const & qfontm = QFontMetrics(qfont);
|
||||
QFontMetrics const & qsmallfontm = QFontMetrics(qsmallfont);
|
||||
|
||||
@ -252,7 +252,7 @@ void QLPainter::text(int x, int y, char_type const * s, size_t ls,
|
||||
|
||||
if (f.realShape() != LyXFont::SMALLCAPS_SHAPE) {
|
||||
setQPainterPen(f.realColor());
|
||||
qp_->setFont(theApp->fontLoader().get(f));
|
||||
qp_->setFont(guiApp->fontLoader().get(f));
|
||||
// We need to draw the text as LTR as we use our own bidi code.
|
||||
qp_->setLayoutDirection(Qt::LeftToRight);
|
||||
qp_->drawText(x, y, str);
|
||||
|
@ -28,12 +28,7 @@
|
||||
#include "lyxsocket.h"
|
||||
|
||||
|
||||
#include "graphics/LoaderQueue.h"
|
||||
|
||||
#include "support/lstrings.h"
|
||||
#include "support/os.h"
|
||||
#include "support/package.h"
|
||||
#include "debug.h"
|
||||
|
||||
|
||||
#include "GuiView.h"
|
||||
@ -42,7 +37,7 @@
|
||||
#include "QLImage.h"
|
||||
#include "qt_helpers.h"
|
||||
#include "socket_callback.h"
|
||||
#include "Application.h"
|
||||
#include "GuiApplication.h"
|
||||
|
||||
#include <QApplication>
|
||||
#include <QEventLoop>
|
||||
@ -56,13 +51,10 @@
|
||||
|
||||
|
||||
using lyx::support::ltrim;
|
||||
using lyx::support::package;
|
||||
|
||||
using lyx::frontend::GuiImplementation;
|
||||
using lyx::frontend::GuiView;
|
||||
using lyx::frontend::Application;
|
||||
|
||||
namespace os = lyx::support::os;
|
||||
using lyx::frontend::GuiApplication;
|
||||
|
||||
using boost::shared_ptr;
|
||||
|
||||
@ -74,35 +66,16 @@ using std::map;
|
||||
using std::vector;
|
||||
using std::string;
|
||||
|
||||
// FIXME: wrong place !
|
||||
LyXServer * lyxserver;
|
||||
LyXServerSocket * lyxsocket;
|
||||
|
||||
lyx::frontend::GuiApplication * guiApp;
|
||||
lyx::frontend::Application * theApp;
|
||||
|
||||
|
||||
namespace {
|
||||
|
||||
int getDPI()
|
||||
{
|
||||
QWidget w;
|
||||
return int(0.5 * (w.logicalDpiX() + w.logicalDpiY()));
|
||||
}
|
||||
|
||||
map<int, shared_ptr<socket_callback> > socket_callbacks;
|
||||
|
||||
void cleanup()
|
||||
{
|
||||
delete lyxsocket;
|
||||
lyxsocket = 0;
|
||||
delete lyxserver;
|
||||
lyxserver = 0;
|
||||
}
|
||||
|
||||
} // namespace anon
|
||||
|
||||
// in QLyXKeySym.C
|
||||
extern void initEncodings();
|
||||
|
||||
namespace lyx_gui {
|
||||
|
||||
bool use_gui = true;
|
||||
@ -124,65 +97,23 @@ int exec(int & argc, char * argv[])
|
||||
that caused the hanging:
|
||||
|
||||
QObject::killTimer: timers cannot be stopped from another thread
|
||||
|
||||
I hope that the problem will disappear automagically when we get rid of
|
||||
lyx_gui entirely, thus using theApp directly throughout the code for LyXFunc,
|
||||
Clipboard and Selection access.
|
||||
*/
|
||||
|
||||
// Force adding of font path _before_ QApplication is initialized
|
||||
FontLoader::initFontPath();
|
||||
|
||||
#if defined(Q_WS_WIN) && !defined(Q_CYGWIN_WIN)
|
||||
static Application app(argc, argv);
|
||||
static GuiApplication app(argc, argv);
|
||||
#else
|
||||
Application app(argc, argv);
|
||||
GuiApplication app(argc, argv);
|
||||
#endif
|
||||
|
||||
theApp = &app;
|
||||
|
||||
|
||||
// install translation file for Qt built-in dialogs
|
||||
// These are only installed since Qt 3.2.x
|
||||
QTranslator qt_trans;
|
||||
QString language_name = QString("qt_") + QLocale::system().name();
|
||||
language_name.truncate(5);
|
||||
if (qt_trans.load(language_name,
|
||||
QLibraryInfo::location(QLibraryInfo::TranslationsPath)))
|
||||
{
|
||||
qApp->installTranslator(&qt_trans);
|
||||
// even if the language calls for RtL, don't do that
|
||||
qApp->setLayoutDirection(Qt::LeftToRight);
|
||||
lyxerr[Debug::GUI]
|
||||
<< "Successfully installed Qt translations for locale "
|
||||
<< fromqstr(language_name) << std::endl;
|
||||
} else
|
||||
lyxerr[Debug::GUI]
|
||||
<< "Could not find Qt translations for locale "
|
||||
<< fromqstr(language_name) << std::endl;
|
||||
|
||||
/*#ifdef Q_WS_MACX
|
||||
// These translations are meant to break Qt/Mac menu merging
|
||||
// algorithm on some entries. It lists the menu names that
|
||||
// should not be moved to the LyX menu
|
||||
QTranslator aqua_trans(0);
|
||||
aqua_trans.insert(QTranslatorMessage("QMenuBar", "Setting", 0,
|
||||
"do_not_merge_me"));
|
||||
aqua_trans.insert(QTranslatorMessage("QMenuBar", "Config", 0,
|
||||
"do_not_merge_me"));
|
||||
aqua_trans.insert(QTranslatorMessage("QMenuBar", "Options", 0,
|
||||
"do_not_merge_me"));
|
||||
aqua_trans.insert(QTranslatorMessage("QMenuBar", "Setup", 0,
|
||||
"do_not_merge_me"));
|
||||
|
||||
qApp->installTranslator(&aqua_trans);
|
||||
#endif
|
||||
*/
|
||||
using namespace lyx::graphics;
|
||||
|
||||
Image::newImage = boost::bind(&QLImage::newImage);
|
||||
Image::loadableFormats = boost::bind(&QLImage::loadableFormats);
|
||||
|
||||
// needs to be done before reading lyxrc
|
||||
lyxrc.dpi = getDPI();
|
||||
|
||||
LoaderQueue::setPriority(10,100);
|
||||
guiApp = &app;
|
||||
theApp = guiApp;
|
||||
|
||||
return LyX::ref().exec2(argc, argv);
|
||||
}
|
||||
@ -195,63 +126,13 @@ void parse_lyxrc()
|
||||
LyXView * create_view(unsigned int width, unsigned int height, int posx, int posy,
|
||||
bool maximize)
|
||||
{
|
||||
// this can't be done before because it needs the Languages object
|
||||
initEncodings();
|
||||
|
||||
int view_id = theApp->gui().newView(width, height);
|
||||
GuiView & view = static_cast<GuiView &> (theApp->gui().view(view_id));
|
||||
|
||||
// FIXME: for now we assume that there is only one LyXView with id = 0.
|
||||
/*int workArea_id_ =*/ theApp->gui().newWorkArea(width, height, 0);
|
||||
//WorkArea * workArea_ = & theApp->gui().workArea(workArea_id_);
|
||||
|
||||
LyX::ref().addLyXView(&view);
|
||||
|
||||
view.init();
|
||||
|
||||
// only true when the -geometry option was NOT used
|
||||
if (width != 0 && height != 0) {
|
||||
if (posx != -1 && posy != -1) {
|
||||
#ifdef Q_OS_WIN32
|
||||
// FIXME: use only setGeoemtry when Trolltech has
|
||||
// fixed the qt4/X11 bug
|
||||
view.setGeometry(posx, posy,width, height);
|
||||
#else
|
||||
view.resize(width, height);
|
||||
view.move(posx, posy);
|
||||
#endif
|
||||
} else {
|
||||
view.resize(width, height);
|
||||
}
|
||||
|
||||
if (maximize)
|
||||
view.setWindowState(Qt::WindowMaximized);
|
||||
}
|
||||
|
||||
view.show();
|
||||
|
||||
return &view;
|
||||
return &guiApp->createView(width, height, posx, posy, maximize);
|
||||
}
|
||||
|
||||
|
||||
int start(LyXView * view, string const & batch)
|
||||
{
|
||||
// FIXME: some code below needs moving
|
||||
|
||||
lyxserver = new LyXServer(&view->getLyXFunc(), lyxrc.lyxpipes);
|
||||
lyxsocket = new LyXServerSocket(&view->getLyXFunc(),
|
||||
os::internal_path(package().temp_dir() + "/lyxsocket"));
|
||||
|
||||
// handle the batch commands the user asked for
|
||||
if (!batch.empty()) {
|
||||
view->getLyXFunc().dispatch(lyxaction.lookupFunc(batch));
|
||||
}
|
||||
|
||||
int const status = qApp->exec();
|
||||
|
||||
// FIXME
|
||||
cleanup();
|
||||
return status;
|
||||
return theApp->start(batch);
|
||||
}
|
||||
|
||||
|
||||
@ -261,14 +142,13 @@ void sync_events()
|
||||
// During screen update/ redraw, this method is disabled to
|
||||
// prevent keyboard events being handed to the LyX core, where
|
||||
// they could cause re-entrant calls to screen update.
|
||||
qApp->processEvents(QEventLoop::ExcludeUserInputEvents);
|
||||
guiApp->processEvents(QEventLoop::ExcludeUserInputEvents);
|
||||
}
|
||||
|
||||
|
||||
void exit(int status)
|
||||
{
|
||||
cleanup();
|
||||
QApplication::exit(status);
|
||||
guiApp->exit(status);
|
||||
}
|
||||
|
||||
|
||||
@ -318,13 +198,13 @@ void update_color(LColor_color)
|
||||
|
||||
void update_fonts()
|
||||
{
|
||||
theApp->fontLoader().update();
|
||||
guiApp->fontLoader().update();
|
||||
}
|
||||
|
||||
|
||||
bool font_available(LyXFont const & font)
|
||||
{
|
||||
return theApp->fontLoader().available(font);
|
||||
return guiApp->fontLoader().available(font);
|
||||
}
|
||||
|
||||
|
||||
|
@ -14,7 +14,7 @@
|
||||
#include "frontends/font_metrics.h"
|
||||
#include "frontends/lyx_gui.h"
|
||||
|
||||
#include "Application.h"
|
||||
#include "GuiApplication.h"
|
||||
#include "FontLoader.h"
|
||||
#include "qt_helpers.h"
|
||||
|
||||
@ -39,8 +39,8 @@ int smallcapswidth(QString const & s, LyXFont const & f)
|
||||
LyXFont smallfont = f;
|
||||
smallfont.decSize().decSize().setShape(LyXFont::UP_SHAPE);
|
||||
|
||||
QFontMetrics const & qm = theApp->fontLoader().metrics(f);
|
||||
QFontMetrics const & qsmallm = theApp->fontLoader().metrics(smallfont);
|
||||
QFontMetrics const & qm = guiApp->fontLoader().metrics(f);
|
||||
QFontMetrics const & qsmallm = guiApp->fontLoader().metrics(smallfont);
|
||||
|
||||
int w = 0;
|
||||
|
||||
@ -65,7 +65,7 @@ int font_metrics::maxAscent(LyXFont const & f)
|
||||
{
|
||||
if (!lyx_gui::use_gui)
|
||||
return 1;
|
||||
return theApp->fontLoader().metrics(f).ascent();
|
||||
return guiApp->fontLoader().metrics(f).ascent();
|
||||
}
|
||||
|
||||
|
||||
@ -75,7 +75,7 @@ int font_metrics::maxDescent(LyXFont const & f)
|
||||
return 1;
|
||||
// We add 1 as the value returned by QT is different than X
|
||||
// See http://doc.trolltech.com/2.3/qfontmetrics.html#200b74
|
||||
return theApp->fontLoader().metrics(f).descent() + 1;
|
||||
return guiApp->fontLoader().metrics(f).descent() + 1;
|
||||
}
|
||||
|
||||
|
||||
@ -83,7 +83,7 @@ int font_metrics::ascent(char_type c, LyXFont const & f)
|
||||
{
|
||||
if (!lyx_gui::use_gui)
|
||||
return 1;
|
||||
QRect const & r = theApp->fontLoader().metrics(f).boundingRect(ucs4_to_qchar(c));
|
||||
QRect const & r = guiApp->fontLoader().metrics(f).boundingRect(ucs4_to_qchar(c));
|
||||
// Qt/Win 3.2.1nc (at least) corrects the GetGlyphOutlineA|W y
|
||||
// value by the height: (x, -y-height, width, height).
|
||||
// Other versions return: (x, -y, width, height)
|
||||
@ -99,7 +99,7 @@ int font_metrics::descent(char_type c, LyXFont const & f)
|
||||
{
|
||||
if (!lyx_gui::use_gui)
|
||||
return 1;
|
||||
QRect const & r = theApp->fontLoader().metrics(f).boundingRect(ucs4_to_qchar(c));
|
||||
QRect const & r = guiApp->fontLoader().metrics(f).boundingRect(ucs4_to_qchar(c));
|
||||
// Qt/Win 3.2.1nc (at least) corrects the GetGlyphOutlineA|W y
|
||||
// value by the height: (x, -y-height, width, height).
|
||||
// Other versions return: (x, -y, width, height)
|
||||
@ -115,7 +115,7 @@ int font_metrics::lbearing(char_type c, LyXFont const & f)
|
||||
{
|
||||
if (!lyx_gui::use_gui)
|
||||
return 1;
|
||||
return theApp->fontLoader().metrics(f).leftBearing(ucs4_to_qchar(c));
|
||||
return guiApp->fontLoader().metrics(f).leftBearing(ucs4_to_qchar(c));
|
||||
}
|
||||
|
||||
|
||||
@ -123,7 +123,7 @@ int font_metrics::rbearing(char_type c, LyXFont const & f)
|
||||
{
|
||||
if (!lyx_gui::use_gui)
|
||||
return 1;
|
||||
QFontMetrics const & m = theApp->fontLoader().metrics(f);
|
||||
QFontMetrics const & m = guiApp->fontLoader().metrics(f);
|
||||
|
||||
// Qt rbearing is from the right edge of the char's width().
|
||||
QChar sc = ucs4_to_qchar(c);
|
||||
@ -141,7 +141,7 @@ int font_metrics::width(char_type const * s, size_t ls, LyXFont const & f)
|
||||
if (f.realShape() == LyXFont::SMALLCAPS_SHAPE)
|
||||
return smallcapswidth(ucs2, f);
|
||||
|
||||
QLFontInfo & fi = theApp->fontLoader().fontinfo(f);
|
||||
QLFontInfo & fi = guiApp->fontLoader().fontinfo(f);
|
||||
|
||||
if (ls == 1)
|
||||
return fi.width(ucs2[0].unicode());
|
||||
@ -166,7 +166,7 @@ int font_metrics::signedWidth(docstring const & s, LyXFont const & f)
|
||||
void font_metrics::rectText(docstring const & str, LyXFont const & f,
|
||||
int & w, int & ascent, int & descent)
|
||||
{
|
||||
QFontMetrics const & m = theApp->fontLoader().metrics(f);
|
||||
QFontMetrics const & m = guiApp->fontLoader().metrics(f);
|
||||
static int const d = 2;
|
||||
w = width(str, f) + d * 2 + 2;
|
||||
ascent = m.ascent() + d;
|
||||
@ -178,7 +178,7 @@ void font_metrics::rectText(docstring const & str, LyXFont const & f,
|
||||
void font_metrics::buttonText(docstring const & str, LyXFont const & f,
|
||||
int & w, int & ascent, int & descent)
|
||||
{
|
||||
QFontMetrics const & m = theApp->fontLoader().metrics(f);
|
||||
QFontMetrics const & m = guiApp->fontLoader().metrics(f);
|
||||
static int const d = 3;
|
||||
w = width(str, f) + d * 2 + 2;
|
||||
ascent = m.ascent() + d;
|
||||
|
Loading…
Reference in New Issue
Block a user