Home

An editor application that uses a pie menu

This tiny editor uses a pie menu on a QTextEdit. It supports some common operations such as undo, redo, cut, copy and paste.


editor.h:

#ifndef EDITOR_H
#define EDITOR_H
#include <qtextedit.h>
#include <qevent.h>

class QtPieMenu;

class Editor : public QTextEdit
{
    Q_OBJECT

public:
    Editor(QWidget *parent = 0, const char *name = 0);

    QSize sizeHint() const;

protected slots:
    void setUndoAvailable(bool);
    void setRedoAvailable(bool);
    void setCopyAvailable(bool);
    void setPasteAvailable(void);

protected:
    void contentsContextMenuEvent(QContextMenuEvent *e);

private:
    QtPieMenu *p;
    QtPieMenu *markMenu;
};

#endif


editor.cpp

#include <qapplication.h>
#include <qclipboard.h>
#include "editor.h"
#include <qtpiemenu.h>

Editor::Editor(QWidget *parent, const char *name)
    : QTextEdit(parent, name)
{
    p = new QtPieMenu("Root menu", this, "Root menu", 10, 50);

    markMenu = new QtPieMenu("Edit", p, "Edit menu", 10, 50);
    markMenu->insertItem("All", this, SLOT(selectAll()));
    markMenu->insertItem("Cut", this, SLOT(cut()));
    markMenu->insertItem("Del", this, SLOT(del()));
    markMenu->insertItem("Copy", this, SLOT(copy()));
    markMenu->setItemWeight(2, 0);
    markMenu->setItemWeight(2, 2);

    p->insertItem(markMenu);

    p->insertItem("<i>Undo</i>", this, SLOT(undo()));
    p->insertItem("Paste", this, SLOT(paste()));
    p->insertItem("<i>Redo</i>", this, SLOT(redo()));

    connect(this, SIGNAL(undoAvailable(bool)), SLOT(setUndoAvailable(bool)));
    connect(this, SIGNAL(redoAvailable(bool)), SLOT(setRedoAvailable(bool)));
    connect(this, SIGNAL(copyAvailable(bool)), SLOT(setCopyAvailable(bool)));
    connect(QApplication::clipboard(), SIGNAL(dataChanged()), SLOT(setPasteAvailable()));

    setUndoAvailable(false);
    setRedoAvailable(false);
    setCopyAvailable(false);

    setText(tr("Mark some text and activate the context menu!"));
}

QSize Editor::sizeHint() const
{
    return QSize(200, 150);
}

void Editor::contentsContextMenuEvent(QContextMenuEvent *e)
{
    p->popup(e->globalPos());
}

void Editor::setUndoAvailable(bool enabled)
{
    p->setItemEnabled(enabled, 1);
}

void Editor::setRedoAvailable(bool enabled)
{
    p->setItemEnabled(enabled, 3);
}

void Editor::setCopyAvailable(bool enabled)
{
    markMenu->setItemEnabled(enabled, 1);
    markMenu->setItemEnabled(enabled, 2);
    markMenu->setItemEnabled(enabled, 3);
}

void Editor::setPasteAvailable()
{
    bool enabled = QApplication::clipboard()->text(QClipboard::Clipboard);
    p->setItemEnabled(enabled, 2);
}


main.cpp:

#include <qapplication.h>
#include "editor.h"

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    Editor window(0, "Editor");
    app.setMainWidget(&window);
    window.show();

    return app.exec();
}


editor.pro:

TEMPLATE = app
INCLUDEPATH += .

include(../../src/qtpiemenu.pri)

HEADERS += editor.h
SOURCES += editor.cpp main.cpp

Copyright © 2003-2006 TrolltechTrademarks
Qt Solutions