mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-15 15:45:43 +00:00
43eda5ad73
When the cursor in RTL text, icons for "depth-increment" or
"layout-toggle Enumerate" look wrong.
Instead of relying on the clumsy "bidi" lfun of 2898c335
, this new
version relies on a new Toobar tag BidiItem that inserts an action
which can have two icons, depending on the direction of the paragraph
containing the caret (or of the direction of the UI when no file is
open).
The alternative icon has the same name as the original one, with a
"+rtl" string appended to the lfun string. The alternative icon is
only active if the file is found. The icon themes `default', `oxygen'
and `classic' have been updated accordingly.
Fixes bug #4451.
99 lines
2.0 KiB
C++
99 lines
2.0 KiB
C++
/**
|
|
* \file Action.cpp
|
|
* 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 "Action.h"
|
|
#include "GuiApplication.h"
|
|
|
|
// DispatchResult.h is needed by the windows compiler because lyx::dispatch
|
|
// returns a DispatchResult const reference. Gcc does not complain. Weird...
|
|
#include "DispatchResult.h"
|
|
#include "FuncRequest.h"
|
|
#include "FuncStatus.h"
|
|
#include "LyX.h"
|
|
|
|
#include "qt_helpers.h"
|
|
|
|
#include "support/debug.h"
|
|
#include "support/lstrings.h"
|
|
|
|
using namespace std;
|
|
|
|
|
|
namespace lyx {
|
|
namespace frontend {
|
|
|
|
|
|
Action::Action(FuncRequest func, QIcon const & icon, QString const & text,
|
|
QString const & tooltip, QObject * parent)
|
|
: QAction(parent), func_(make_shared<FuncRequest>(move(func))), icon_(icon)
|
|
{
|
|
init(text, tooltip);
|
|
}
|
|
|
|
|
|
Action::Action(shared_ptr<FuncRequest const> func,
|
|
QIcon const & icon, QString const & text,
|
|
QString const & tooltip, QObject * parent)
|
|
: QAction(parent), func_(func), icon_(icon)
|
|
{
|
|
init(text, tooltip);
|
|
}
|
|
|
|
|
|
void Action::init(QString const & text, QString const & tooltip)
|
|
{
|
|
// only Qt/Mac handles that
|
|
setMenuRole(NoRole);
|
|
setText(text);
|
|
setToolTip(tooltip);
|
|
setStatusTip(tooltip);
|
|
connect(this, SIGNAL(triggered()), this, SLOT(action()));
|
|
update();
|
|
}
|
|
|
|
|
|
void Action::update()
|
|
{
|
|
FuncStatus const status = getStatus(*func_);
|
|
|
|
if (status.onOff(true)) {
|
|
setCheckable(true);
|
|
setChecked(true);
|
|
} else if (status.onOff(false)) {
|
|
setCheckable(true);
|
|
setChecked(false);
|
|
} else {
|
|
setCheckable(false);
|
|
}
|
|
|
|
if (rtlIcon_.isNull() || !guiApp->rtlContext())
|
|
setIcon(icon_);
|
|
else
|
|
setIcon(rtlIcon_);
|
|
|
|
setEnabled(status.enabled());
|
|
}
|
|
|
|
|
|
void Action::action()
|
|
{
|
|
//LYXERR(Debug::ACTION, "calling lyx::dispatch: func_: ");
|
|
|
|
lyx::dispatch(*func_);
|
|
triggered(this);
|
|
}
|
|
|
|
} // namespace frontend
|
|
} // namespace lyx
|
|
|
|
#include "moc_Action.cpp"
|