Development/Tutorials/Kate/KTextEditor Example

From KDE TechBase
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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

  1. include <KApplication>
  2. include <KAboutData>
  3. include <KCmdLineArgs>
  1. 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

  1. ifndef MAINWINDOW_H
  2. define MAINWINDOW_H
  1. include <KParts/MainWindow>
  2. include <QtGui/QKeyEvent>


namespace KTextEditor {

 class Document;
 class View;

}

class MainWindow : public KParts::MainWindow {

 Q_OBJECT
 
 public:
   MainWindow(QWidget *parent=0);
 
 private slots:
   void clear();
   void openFile();
 private:
   void setupActions();
   KTextEditor::View *m_view;
   KTextEditor::Document *m_doc;

};

  1. 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

  1. include "mainwindow.h"
  1. include <KApplication>
  2. include <KAction>
  3. include <KLocale>
  4. include <KActionCollection>
  5. include <KStandardAction>
  6. include <KFileDialog>
  7. include <KMessageBox>
  8. include <KIO/NetAccess>
  9. include <KSaveFile>
  10. include <QTextStream>
  11. include <KXMLGUIFactory>


  1. include <KTextEditor/Document>
  2. include <KTextEditor/View>
  3. include <KTextEditor/Editor>
  4. include <KTextEditor/EditorChooser>


MainWindow::MainWindow(QWidget *) {

 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");
 createShellGUI(true);
 guiFactory()->addClient(m_view);
 show ();

}

void MainWindow::setupActions() {

 KStandardAction::quit(kapp, SLOT(quit()), actionCollection());
 KStandardAction::open(this, SLOT(openFile()), actionCollection());
 KStandardAction::clear(this, SLOT(clear()), actionCollection());

}

void MainWindow::clear() {

 m_doc->clear();

}

void MainWindow::openFile() {

 m_view->document()->openUrl(KFileDialog::getOpenFileName());

}

The implementation is straight forward and self-explanatory. Some remarks

MainWindow::Mainwindow() First the editor component is created on heap. After creating document() and view() MainWindows GUI definition is loaded from editorui.rc. Call guiFactory()->addClient(m_view) adds kate parts menue and toolbar definitions to MainWindow. After that a full featured texteditor with syntax highlighting etc. is available in your application.

MainWindow::setupAction() Defines three additional actions.

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)