mirror of
https://github.com/vim/vim.git
synced 2025-09-30 04:44:14 -04:00
259 lines
5.5 KiB
C++
259 lines
5.5 KiB
C++
/* vi:set ts=8 sts=0 sw=8:
|
|
*
|
|
* VIM - Vi IMproved by Bram Moolenaar
|
|
*
|
|
* Do ":help uganda" in Vim to read copying and usage conditions.
|
|
* Do ":help credits" in Vim to see a list of people who contributed.
|
|
*/
|
|
|
|
/*
|
|
* Porting to KDE(2) was done by
|
|
*
|
|
* (C) 2000 by Thomas Capricelli <orzel@freehackers.org>
|
|
*
|
|
* Please visit http://freehackers.org/kvim for other vim- or
|
|
* kde-related coding.
|
|
*
|
|
* $Id$
|
|
*
|
|
*/
|
|
|
|
#ifndef GUI_KDE_WIDGET
|
|
#define GUI_KDE_WIDGET
|
|
|
|
#if 1
|
|
#define dbf( format, args... ) { printf( "%s" " : " format "\n" , __FUNCTION__ , ## args ); fflush(stdout); }
|
|
#define db() { printf( "%s\n", __FUNCTION__ );fflush(stdout); }
|
|
#else
|
|
#define dbf(format, args... )
|
|
#define db()
|
|
#endif
|
|
|
|
#define UNIX // prevent a warning : a symbol is defined twice in X and Qt
|
|
|
|
#include <qdialog.h>
|
|
#include <qlabel.h>
|
|
#include <qsignalmapper.h>
|
|
#include <qtimer.h>
|
|
#include <qmainwindow.h>
|
|
#include <qapplication.h>
|
|
#include <qevent.h>
|
|
#include <qlineedit.h>
|
|
#include <qpainter.h>
|
|
#include <qwidget.h>
|
|
#include <qpopupmenu.h>
|
|
#include <klocale.h>
|
|
#include <kapp.h>
|
|
#include <kcmdlineargs.h>
|
|
#include <kaboutdata.h>
|
|
#include <keditcl.h>
|
|
#include <kaboutdata.h>
|
|
#if (KDE_VERSION>=290)
|
|
#include <kmainwindow.h>
|
|
#else
|
|
#include <ktmainwindow.h>
|
|
#endif
|
|
#include <kparts/part.h>
|
|
#include <kurl.h>
|
|
#include "kvim_iface.h"
|
|
|
|
#undef UNIX // prevent a warning
|
|
extern "C" {
|
|
#include "vim.h"
|
|
}
|
|
|
|
class QPushButton;
|
|
class QDialog;
|
|
class QLineEdit;
|
|
class QSignalMapper;
|
|
class QPaintEvent;
|
|
|
|
enum BlinkState
|
|
{
|
|
BLINK_NONE,
|
|
BLINK_ON,
|
|
BLINK_OFF
|
|
};
|
|
|
|
class VimWidget : public QWidget, virtual public KVim
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
VimWidget(QWidget *parent = 0, const char *name = 0, WFlags f = 0);
|
|
virtual void paintEvent(QPaintEvent *);
|
|
void draw_string(int x, int y, QString s, int len, int flags);
|
|
|
|
/** Init the blinking time */
|
|
void set_blink_time(long, long, long);
|
|
void start_cursor_blinking();
|
|
void stop_cursor_blinking();
|
|
void wait(long);
|
|
#ifdef FEAT_CLIENTSERVER
|
|
void serverActivate(WId id);
|
|
#endif
|
|
#ifdef FEAT_MZSCHEME
|
|
void enable_mzscheme_threads();
|
|
void disable_mzscheme_threads();
|
|
#endif
|
|
void flash();
|
|
|
|
/** DCOP */
|
|
void execNormal(QString command);
|
|
void execInsert(QString command);
|
|
void execRaw(QString command);
|
|
void execCmd(QString command);
|
|
QString eval(QString expr);
|
|
|
|
bool wait_done;
|
|
BlinkState blink_state;
|
|
QPainter *painter;
|
|
QPopupMenu *menu;
|
|
virtual void setMicroFocusHint(int x, int y, int w, int h, bool text=TRUE, QFont *f = 0)
|
|
{
|
|
QWidget::setMicroFocusHint(x, y, w, h, text, f);
|
|
}
|
|
|
|
protected:
|
|
virtual void keyPressEvent(QKeyEvent *);
|
|
virtual void mousePressEvent(QMouseEvent *);
|
|
virtual void mouseDoubleClickEvent(QMouseEvent *);
|
|
virtual void mouseReleaseEvent(QMouseEvent *);
|
|
virtual void mouseMoveEvent(QMouseEvent *);
|
|
virtual void focusInEvent(QFocusEvent *);
|
|
virtual void focusOutEvent(QFocusEvent *);
|
|
virtual void dragEnterEvent(QDragEnterEvent *);
|
|
virtual void dropEvent(QDropEvent *);
|
|
#ifdef FEAT_XIM
|
|
virtual void imStartEvent(QIMEvent *);
|
|
virtual void imEndEvent(QIMEvent *);
|
|
virtual void imComposeEvent(QIMEvent *);
|
|
#endif
|
|
#ifdef FEAT_MZSCHEME
|
|
virtual void timerEvent(QTimerEvent *);
|
|
#endif
|
|
|
|
/* cursor blinking stuff */
|
|
QTimer blink_timer;
|
|
long blink_wait_time, blink_on_time, blink_off_time;
|
|
|
|
/* wait for input */
|
|
QTimer wait_timer;
|
|
|
|
#ifdef FEAT_MZSCHEME
|
|
int mzscheme_timer_id;
|
|
#endif
|
|
|
|
public slots:
|
|
void blink_cursor();
|
|
void wait_timeout();
|
|
};
|
|
|
|
class VimMainWindow : public KMainWindow
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
VimMainWindow(const char *name = 0L, WFlags f = WDestructiveClose);
|
|
|
|
/** called when the widget closes */
|
|
// bool close(bool alsoDelete);
|
|
VimWidget *w;
|
|
KEdFind *finddlg;
|
|
KEdReplace *repldlg;
|
|
int have_tearoff;
|
|
QTextCodec *codec;
|
|
|
|
public slots:
|
|
void menu_activated(int dx);
|
|
void clipboard_selection_update();
|
|
void clipboard_data_update();
|
|
void slotSearch();
|
|
void slotFind();
|
|
void slotReplace();
|
|
void slotReplaceAll();
|
|
void showAboutApplication();
|
|
void showAboutKDE();
|
|
void showBugReport();
|
|
void showTipOfTheDay();
|
|
void buffersToolbar();
|
|
bool isLocked();
|
|
void lock();
|
|
void unlock();
|
|
|
|
protected:
|
|
virtual void wheelEvent(QWheelEvent *);
|
|
virtual void resizeEvent(QResizeEvent *e);
|
|
|
|
#if defined(FEAT_SESSION)
|
|
void saveGlobalProperties(KConfig *conf);
|
|
void readGlobalProperties(KConfig *conf);
|
|
#endif
|
|
bool queryClose();
|
|
bool queryExit();
|
|
bool locked;
|
|
};
|
|
|
|
|
|
class VimDialog : public QDialog
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
VimDialog(int type, /* type of dialog */
|
|
unsigned char *title, /* title of dialog */
|
|
unsigned char *message, /* message text */
|
|
unsigned char *buttons, /* names of buttons */
|
|
int def_but, /* default button */
|
|
char_u *textfield); /* input text */
|
|
private:
|
|
QSignalMapper mapper;
|
|
QLineEdit *entry;
|
|
char_u *ret;
|
|
int butNb;
|
|
|
|
protected slots:
|
|
void done(int);
|
|
};
|
|
|
|
|
|
/*
|
|
* QScrollBar pool
|
|
*/
|
|
struct GuiScrollbar;
|
|
|
|
class SBPool : public QObject
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
SBPool(void);
|
|
void create(GuiScrollbar * sb, int orient);
|
|
void destroy(GuiScrollbar * sb);
|
|
public slots:
|
|
void sbUsed(int who);
|
|
private:
|
|
QSignalMapper mapper;
|
|
};
|
|
|
|
class KVimUtils
|
|
{
|
|
public:
|
|
static QString convertEncodingName(QString);
|
|
#if QT_VERSION<300
|
|
static bool fromString(QFont*,QString);
|
|
static QString toString(QFont*);
|
|
#endif
|
|
};
|
|
|
|
extern VimMainWindow *vmw;
|
|
extern SBPool *sbpool;
|
|
extern QString *argServerName;
|
|
|
|
#define QSTR(x) \
|
|
(has_mbyte ? \
|
|
(enc_utf8 ? \
|
|
QString::fromUtf8((const char *)x) : \
|
|
QString::fromLocal8Bit((const char *)x)) : \
|
|
QString((const char *)x))
|
|
|
|
#endif // GUI_KDE_WIDGET
|