11
|
1 /* vi:set ts=8 sts=0 sw=8:
|
|
2 *
|
|
3 * VIM - Vi IMproved by Bram Moolenaar
|
|
4 *
|
|
5 * Do ":help uganda" in Vim to read copying and usage conditions.
|
|
6 * Do ":help credits" in Vim to see a list of people who contributed.
|
|
7 */
|
|
8
|
|
9 /*
|
|
10 * Porting to KDE(2) was done by
|
|
11 *
|
|
12 * (C) 2000 by Thomas Capricelli <orzel@freehackers.org>
|
|
13 *
|
|
14 * Please visit http://freehackers.org/kvim for other vim- or
|
|
15 * kde-related coding.
|
|
16 *
|
|
17 * $Id$
|
|
18 *
|
|
19 */
|
|
20
|
|
21 #ifndef GUI_KDE_WIDGET
|
|
22 #define GUI_KDE_WIDGET
|
|
23
|
|
24 #if 1
|
|
25 #define dbf( format, args... ) { printf( "%s" " : " format "\n" , __FUNCTION__ , ## args ); fflush(stdout); }
|
|
26 #define db() { printf( "%s\n", __FUNCTION__ );fflush(stdout); }
|
|
27 #else
|
|
28 #define dbf(format, args... )
|
|
29 #define db()
|
|
30 #endif
|
|
31
|
|
32 #define UNIX // prevent a warning : a symbol is defined twice in X and Qt
|
|
33
|
|
34 #include <qdialog.h>
|
|
35 #include <qlabel.h>
|
|
36 #include <qsignalmapper.h>
|
|
37 #include <qtimer.h>
|
|
38 #include <qmainwindow.h>
|
|
39 #include <qapplication.h>
|
|
40 #include <qevent.h>
|
|
41 #include <qlineedit.h>
|
|
42 #include <qpainter.h>
|
|
43 #include <qwidget.h>
|
|
44 #include <qpopupmenu.h>
|
|
45 #include <klocale.h>
|
|
46 #include <kapp.h>
|
|
47 #include <kcmdlineargs.h>
|
|
48 #include <kaboutdata.h>
|
|
49 #include <keditcl.h>
|
|
50 #include <kaboutdata.h>
|
|
51 #if (KDE_VERSION>=290)
|
|
52 #include <kmainwindow.h>
|
|
53 #else
|
|
54 #include <ktmainwindow.h>
|
|
55 #endif
|
|
56 #include <kparts/part.h>
|
|
57 #include <kurl.h>
|
|
58 #include "kvim_iface.h"
|
|
59
|
|
60 #undef UNIX // prevent a warning
|
|
61 extern "C" {
|
|
62 #include "vim.h"
|
|
63 }
|
|
64
|
|
65 class QPushButton;
|
|
66 class QDialog;
|
|
67 class QLineEdit;
|
|
68 class QSignalMapper;
|
|
69 class QPaintEvent;
|
|
70
|
|
71 enum BlinkState {
|
|
72 BLINK_NONE,
|
|
73 BLINK_ON,
|
|
74 BLINK_OFF
|
|
75 };
|
|
76
|
|
77 class VimWidget : public QWidget, virtual public KVim
|
|
78 {
|
|
79 Q_OBJECT
|
|
80
|
|
81 public:
|
|
82 VimWidget( QWidget *parent=0, const char *name=0, WFlags f=0 );
|
|
83 virtual void paintEvent( QPaintEvent *);
|
|
84 void draw_string(int x, int y, QString s, int len, int flags);
|
|
85
|
|
86 /** Init the blinking time */
|
|
87 void set_blink_time( long, long, long );
|
|
88 void start_cursor_blinking();
|
|
89 void stop_cursor_blinking();
|
|
90 void wait(long);
|
|
91 #ifdef FEAT_CLIENTSERVER
|
|
92 void serverActivate(WId id);
|
|
93 #endif
|
|
94 void flash();
|
|
95
|
|
96 /** DCOP */
|
|
97 void execNormal(QString command);
|
|
98 void execInsert(QString command);
|
|
99 void execRaw(QString command);
|
|
100 void execCmd(QString command);
|
|
101 QString eval(QString expr);
|
|
102
|
|
103 bool wait_done;
|
|
104 BlinkState blink_state;
|
|
105 QPainter *painter;
|
|
106 QPopupMenu *menu;
|
|
107
|
|
108 protected:
|
|
109 virtual void keyPressEvent( QKeyEvent * );
|
|
110 virtual void mousePressEvent( QMouseEvent *);
|
|
111 virtual void mouseDoubleClickEvent( QMouseEvent *);
|
|
112 virtual void mouseReleaseEvent( QMouseEvent *);
|
|
113 virtual void mouseMoveEvent( QMouseEvent *);
|
|
114 virtual void focusInEvent( QFocusEvent * );
|
|
115 virtual void focusOutEvent( QFocusEvent * );
|
|
116 virtual void dragEnterEvent (QDragEnterEvent *);
|
|
117 virtual void dropEvent (QDropEvent *);
|
|
118 #ifdef FEAT_XIM
|
|
119 virtual void imStartEvent ( QIMEvent * );
|
|
120 virtual void imEndEvent ( QIMEvent * );
|
|
121 virtual void imComposeEvent ( QIMEvent * );
|
|
122 #endif
|
|
123
|
|
124 /* cursor blinking stuff */
|
|
125 QTimer blink_timer;
|
|
126 long blink_wait_time, blink_on_time, blink_off_time;
|
|
127
|
|
128 /* wait for input */
|
|
129 QTimer wait_timer;
|
|
130
|
|
131 public slots:
|
|
132 void blink_cursor();
|
|
133 void wait_timeout();
|
|
134 };
|
|
135
|
|
136 class VimMainWindow : public KMainWindow
|
|
137 {
|
|
138 Q_OBJECT
|
|
139
|
|
140 public:
|
|
141 VimMainWindow ( const char *name = 0L, WFlags f = WDestructiveClose );
|
|
142
|
|
143 /** called when the widget closes */
|
|
144 // bool close(bool alsoDelete);
|
|
145 VimWidget *w;
|
|
146 KEdFind *finddlg;
|
|
147 KEdReplace *repldlg;
|
|
148 int have_tearoff;
|
|
149 QTextCodec *codec;
|
|
150
|
|
151 public slots:
|
|
152 void menu_activated(int dx);
|
|
153 void clipboard_selection_update();
|
|
154 void clipboard_data_update();
|
|
155 void slotSearch();
|
|
156 void slotFind();
|
|
157 void slotReplace();
|
|
158 void slotReplaceAll();
|
|
159 void showAboutApplication();
|
|
160 void showAboutKDE();
|
|
161 void showBugReport();
|
|
162 void showTipOfTheDay();
|
|
163 void buffersToolbar();
|
|
164 bool isLocked();
|
|
165 void lock();
|
|
166 void unlock();
|
|
167
|
|
168 protected:
|
|
169 virtual void wheelEvent (QWheelEvent *);
|
|
170 virtual void resizeEvent ( QResizeEvent *e );
|
|
171
|
|
172 #if defined(FEAT_SESSION)
|
|
173 void saveGlobalProperties (KConfig *conf);
|
|
174 void readGlobalProperties (KConfig *conf);
|
|
175 #endif
|
|
176 bool queryClose();
|
|
177 bool queryExit();
|
|
178 bool locked;
|
|
179 };
|
|
180
|
|
181
|
|
182 class VimDialog : public QDialog
|
|
183 {
|
|
184 Q_OBJECT
|
|
185 public:
|
|
186 VimDialog (int type, /* type of dialog */
|
|
187 unsigned char * title, /* title of dialog */
|
|
188 unsigned char * message, /* message text */
|
|
189 unsigned char * buttons, /* names of buttons */
|
|
190 int def_but, /* default button */
|
|
191 char_u *textfield); /* input text */
|
|
192 private:
|
|
193 QSignalMapper mapper;
|
|
194 QLineEdit *entry;
|
|
195 char_u *ret;
|
|
196 int butNb;
|
|
197
|
|
198 protected slots:
|
|
199 void done(int);
|
|
200 };
|
|
201
|
|
202
|
|
203 /*
|
|
204 * QScrollBar pool
|
|
205 */
|
|
206 struct GuiScrollbar;
|
|
207
|
|
208 class SBPool : public QObject
|
|
209 {
|
|
210 Q_OBJECT
|
|
211 public:
|
|
212 SBPool(void);
|
|
213 void create(GuiScrollbar * sb, int orient);
|
|
214 void destroy(GuiScrollbar * sb);
|
|
215 public slots:
|
|
216 void sbUsed(int who);
|
|
217 private:
|
|
218 QSignalMapper mapper;
|
|
219 };
|
|
220
|
|
221 class KVimUtils {
|
|
222 public:
|
|
223 static QString convertEncodingName(QString);
|
|
224 #if QT_VERSION<300
|
|
225 static bool fromString(QFont*,QString);
|
|
226 static QString toString(QFont*);
|
|
227 #endif
|
|
228 };
|
|
229
|
|
230 extern VimMainWindow *vmw;
|
|
231 extern SBPool *sbpool;
|
|
232 extern QString *argServerName;
|
|
233
|
|
234 #endif // GUI_KDE_WIDGET
|