#include "fakevimhandler.h" #include #include #include #include #include #include #include using namespace FakeVim::Internal; class Proxy : public QObject { Q_OBJECT public: Proxy(QWidget *widget, QMainWindow *mw, QObject *parent = 0) : QObject(parent), m_widget(widget), m_mainWindow(mw) {} public slots: void changeSelection(const QList &s) { if (QPlainTextEdit *ed = qobject_cast(m_widget)) ed->setExtraSelections(s); else if (QTextEdit *ed = qobject_cast(m_widget)) ed->setExtraSelections(s); } void changeStatusData(const QString &info) { m_statusData = info; updateStatusBar(); } void changeStatusMessage(const QString &info) { m_statusMessage = info; updateStatusBar(); } void changeExtraInformation(const QString &info) { QMessageBox::information(m_widget, "Information", info); } void updateStatusBar() { int slack = 80 - m_statusMessage.size() - m_statusData.size(); QString msg = m_statusMessage + QString(slack, QChar(' ')) + m_statusData; m_mainWindow->statusBar()->showMessage(msg); } private: QWidget *m_widget; QMainWindow *m_mainWindow; QString m_statusMessage; QString m_statusData; }; int main(int argc, char *argv[]) { QApplication app(argc, argv); QStringList args = app.arguments(); (void) args.takeFirst(); QWidget *widget = 0; QString title; bool usePlainTextEdit = args.size() < 2; if (usePlainTextEdit) { QPlainTextEdit *w = new QPlainTextEdit; w->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); title = "PlainTextEdit"; widget = w; } else { QTextEdit *w = new QTextEdit; w->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); title = "TextEdit"; widget = w; } widget->setObjectName("Editor"); //widget->resize(450, 350); widget->setFocus(); QMainWindow mw; Proxy proxy(widget, &mw); FakeVimHandler handler(widget, 0); mw.setWindowTitle("Fakevim (" + title + ")"); mw.setCentralWidget(widget); mw.resize(600, 650); mw.move(0, 0); mw.show(); QFont font = widget->font(); //: -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-1 //font.setFamily("Misc"); font.setFamily("Monospace"); //font.setStretch(QFont::SemiCondensed); widget->setFont(font); mw.statusBar()->setFont(font); QObject::connect(&handler, SIGNAL(commandBufferChanged(QString)), &proxy, SLOT(changeStatusMessage(QString))); QObject::connect(&handler, SIGNAL(quitRequested(bool)), &app, SLOT(quit())); QObject::connect(&handler, SIGNAL(selectionChanged(QList)), &proxy, SLOT(changeSelection(QList))); QObject::connect(&handler, SIGNAL(extraInformationChanged(QString)), &proxy, SLOT(changeExtraInformation(QString))); QObject::connect(&handler, SIGNAL(statusDataChanged(QString)), &proxy, SLOT(changeStatusData(QString))); theFakeVimSetting(ConfigUseFakeVim)->setValue(true); theFakeVimSetting(ConfigShiftWidth)->setValue(8); theFakeVimSetting(ConfigTabStop)->setValue(8); handler.installEventFilter(); handler.setupWidget(); if (args.size() >= 1) handler.handleCommand("r " + args.at(0)); return app.exec(); } #include "main.moc"