Development/Tutorials/Kate/KTextEditor Example
Abstract
We build a small application using KTexteditor. This example supports syntax highlighting and other useful features. We see how to use KTextEditor.
The Code
main.cpp
- include <KApplication>
- include <KAboutData>
- include <KCmdLineArgs>
- include "mainwindow.h"
int main (int argc, char *argv[])
{
KAboutData aboutData( "editor", "editor",
ki18n("Editor"), "1.0",
ki18n("A simple text area which can load and save."),
KAboutData::License_GPL,
ki18n("Copyright (c) 2007 Developer") );
KCmdLineArgs::init( argc, argv, &aboutData );
KApplication app;
MainWindow* window = new MainWindow();
window->show();
return app.exec();
}
In main.cpp just defines aboutData and app and shows Mainwindow.
mainwindow.h
- ifndef MAINWINDOW_H
- define MAINWINDOW_H
- include <KXmlGuiWindow>
- include <QtGui/QKeyEvent>
namespace KTextEditor
{
class Document;
class View;
}
class MainWindow : public KXmlGuiWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent=0);
private slots:
void newFile();
void openFile();
void saveFile();
void saveFileAs();
private:
void setupActions();
QString fileName;
KTextEditor::View *m_view;
KTextEditor::Document *m_doc;
};
- endif
Class MainWindow is a successor of KXmlGuiWindow and contains KTextEditor (document and view) as a private Variable. There are also some useful methods defined.
mainwindow.cpp
- include "mainwindow.h"
- include <KApplication>
- include <KAction>
- include <KLocale>
- include <KActionCollection>
- include <KStandardAction>
- include <KFileDialog>
- include <KMessageBox>
- include <KIO/NetAccess>
- include <KSaveFile>
- include <QTextStream>
- include <kxmlguifactory.h>
- include <ktexteditor/document.h>
- include <ktexteditor/view.h>
- include <ktexteditor/editor.h>
- include <ktexteditor/editorchooser.h>
MainWindow::MainWindow(QWidget *parent)
: KXmlGuiWindow(parent),
fileName(QString()) //new
{
KTextEditor::Editor *editor = KTextEditor::EditorChooser::editor();
if (!editor) {
KMessageBox::error(this, i18n("A KDE text-editor component could not be found;\n"
"please check your KDE installation."));
kapp->exit(1);
}
m_doc = editor->createDocument(0);
m_view = qobject_cast<KTextEditor::View*>(m_doc->createView(this));
setCentralWidget(m_view);
setupActions();
setXMLFile("editorui.rc");
guiFactory()->addClient(m_view);
show ();
}
void MainWindow::setupActions()
{
KAction* clearAction = new KAction(this);
clearAction->setText(i18n("Clear"));
clearAction->setIcon(KIcon("document-new"));
clearAction->setShortcut(Qt::CTRL + Qt::Key_W);
actionCollection()->addAction("clear", clearAction);
connect(clearAction, SIGNAL(triggered(bool)),m_doc, SLOT(clear()));
KStandardAction::quit(kapp, SLOT(quit()), actionCollection());
KStandardAction::open(this, SLOT(openFile()), actionCollection()); //new
KStandardAction::openNew(this, SLOT(newFile()), actionCollection()); //new
setupGUI();
}
void MainWindow::newFile()
{
fileName.clear();
m_doc->clear();
}
void MainWindow::saveFileAs()
{
m_doc->documentSaveAs();
}
void MainWindow::saveFile()
{
m_doc->documentSave();
}
void MainWindow::openFile()
{
m_view->document()->openUrl(KFileDialog::getOpenFileName());
}
The implementation is straight forward and self-explanatory.
editorui.rc
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE kpartgui SYSTEM "kpartgui.dtd">
<gui name="editor" version="1">
<ToolBar name="mainToolBar" >
<text>Main Toolbar</text>
<Action name="clear" />
</ToolBar>
<MenuBar>
<Menu name="file" >
<Action name="clear" />
</Menu>
</MenuBar>
</gui>
CMakeLists.txt
project(editor)
find_package(KDE4 REQUIRED)
include_directories(${KDE4_INCLUDES})
set(editor_SRCS
main.cpp
mainwindow.cpp
)
kde4_add_executable(editor ${editor_SRCS})
target_link_libraries(editor ${KDE4_KDEUI_LIBS}
${KDE4_KIO_LIBS}
${KDE4_KTEXTEDITOR_LIBS})
install(TARGETS editor DESTINATION ${BIN_INSTALL_DIR})
install(FILES editorui.rc
DESTINATION ${DATA_INSTALL_DIR}/editor)