summaryrefslogtreecommitdiffstats
path: root/scribus/plugins/tools/spellcheck/aspellplugin.cpp
blob: 3e511999dacb7fcd3f77e3983ab755eae1759366 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
/*
For general Scribus (>=1.3.2) copyright and licensing information please refer
to the COPYING file provided with the program. Following this notice may exist
a copyright and/or license notice that predates the release of Scribus 1.3.2
for which a new license (GPL+exception) is in place.
*/
#include "scraction.h"
#include "aspellplugin.h"
#include "aspellpluginimpl.h"

// See scplugin.h and pluginmanager.{cpp,h} for detail on what these methods
// do. That documentatation is not duplicated here.
// Please don't implement the functionality of your plugin here; do that
// in aspellpluginimpl.h and aspellpluginimpl.cpp .

AspellPlugin::AspellPlugin() : ScActionPlugin()
{
	// Set action info in languageChange, so we only have to do
	// it in one place.
	languageChange();
}

AspellPlugin::~AspellPlugin() {};

void AspellPlugin::languageChange()
{
	// Note that we leave the unused members unset. They'll be initialised
	// with their default ctors during construction.
	// Action name
	m_actionInfo.name = "AspellPlugin";
	// Action text for menu, including &accel
	m_actionInfo.text = tr("Spell Checker");
	// Menu
	m_actionInfo.menu = "Item";
	m_actionInfo.notSuitableFor.append(PageItem::Line);
	m_actionInfo.notSuitableFor.append(PageItem::LatexFrame);
	m_actionInfo.notSuitableFor.append(PageItem::Polygon);
	m_actionInfo.notSuitableFor.append(PageItem::PolyLine);
	m_actionInfo.notSuitableFor.append(PageItem::ImageFrame);
	m_actionInfo.forAppMode.append(modeNormal);
	m_actionInfo.needsNumObjects = 1;
	// If needed, what item to add the menu item after
	//m_actionInfo.menuAfterName = "ColorWheel"
	// If needed, the keyboard shortcut for the plugin
	// GM: gedit, OpenOffice use F7 for spell-checking. There
	//seems to be no standard for KDE apps, other than the
	//suggestion of CTRL+ALT+S in the KClipSpellApplet.
	m_actionInfo.keySequence = "F7";
	// Should the menu item be enabled when the app starts
	// (even without a document open) ?
	m_actionInfo.enabledOnStartup = false;
}

const QString AspellPlugin::fullTrName() const
{
	return QObject::tr("Spell check (aspell)");
}

const ScActionPlugin::AboutData* AspellPlugin::getAboutData() const
{
	AboutData* about = new AboutData;
	Q_CHECK_PTR(about);
	about->authors = "Gora Mohanty <gora@srijan.in>";
	about->shortDescription = tr( "Spell-checking support" );
	about->description =
	  tr( "Adds support for spell-checking via aspell. Languages "
	      "can be chosen from among the installed aspell "
	      "dictionaries, and spell-checking can be done on the "
	      "fly, or on selected text." );
	about->version = tr( "0.1" );
	about->copyright = QString::fromUtf8( "Copyright \xa9 Gora Mohanty <gora@srijan.in>" );
	about->license = "LGPL";
	return about;
}

void AspellPlugin::deleteAboutData(const AboutData* about) const
{
	Q_ASSERT(about);
	delete about;
}

bool AspellPlugin::run(ScribusDoc* doc, QString target)
{
	AspellPluginImpl *aspellPluginImpl = new AspellPluginImpl( doc );
	Q_CHECK_PTR(aspellPluginImpl);
	// The spellcheck is disabled when there are no available
	// dictionaries.
	if (aspellPluginImpl->errorMessage().isEmpty())
	{
//		qDebug()<<"Running aspell plugin";
		aspellPluginImpl->exec();
	}
	else
	{
		doc->scMW()->scrActions[m_actionInfo.name]->setEnabled(false);
		doc->scMW()->scrActions[m_actionInfo.name]->setVisible(false);
		QMessageBox::warning(doc->scMW(), tr("Aspell Plugin Error"), aspellPluginImpl->errorMessage());
	}
	delete aspellPluginImpl;
	return true;
}

// Low level plugin API
int x_aspellplugin_getPluginAPIVersion()
{
	return PLUGIN_API_VERSION;
}

ScPlugin* x_aspellplugin_getPlugin()
{
	AspellPlugin* plug = new AspellPlugin();
	Q_CHECK_PTR(plug);
	return plug;
}

void x_aspellplugin_freePlugin(ScPlugin* plugin)
{
	AspellPlugin* plug = dynamic_cast<AspellPlugin*>(plugin);
	Q_ASSERT(plug);
	delete plug;
}