/* 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 * * 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 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if (KDE_VERSION>=290) #include #else #include #endif #include #include #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