3 Minimum Profit - Programmer Text Editor
7 Copyright (C) 2009 Angel Ortega <angel@triptico.com>
9 This program is free software; you can redistribute it and/or
10 modify it under the terms of the GNU General Public License
11 as published by the Free Software Foundation; either version 2
12 of the License, or (at your option) any later version.
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
21 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
23 http://www.triptico.com
27 /* override auto-generated definition in config.h */
28 extern "C" int qt4_drv_detect(int * argc
, char *** argv
);
44 class MPWindow
: public QMainWindow
47 MPWindow(QWidget
*parent
= 0);
49 bool event(QEvent
*event
);
54 class MPArea
: public QWidget
59 MPArea(QWidget
*parent
= 0);
60 void inputMethodEvent(QInputMethodEvent
*event
);
61 void keyPressEvent(QKeyEvent
*event
);
62 void keyReleaseEvent(QKeyEvent
*event
);
63 void mousePressEvent(QMouseEvent
*event
);
64 void mouseReleaseEvent(QMouseEvent
*event
);
65 void mouseMoveEvent(QMouseEvent
*event
);
66 void wheelEvent(QWheelEvent
*event
);
67 void dragEnterEvent(QDragEnterEvent
*event
);
68 void dropEvent(QDropEvent
*event
);
69 bool event(QEvent
*event
);
72 void paintEvent(QPaintEvent
*event
);
75 void from_scrollbar(int);
76 void from_filetabs(int);
77 void from_menu(QAction
*);
84 QStatusBar
*statusbar
;
87 #define MENU_CLASS QMenu
89 #include "mpv_qk_common.cpp"
91 static void draw_status(void)
93 statusbar
->showMessage(str_to_qstring(mp_build_status_line()));
97 /** MPWindow methods **/
99 MPWindow::MPWindow(QWidget
*parent
) : QMainWindow(parent
)
101 setWindowTitle("mp-5");
103 menubar
= this->menuBar();
106 statusbar
= this->statusBar();
108 /* the full container */
109 QVBoxLayout
*vb
= new QVBoxLayout(this);
111 file_tabs
= new QTabBar();
112 file_tabs
->setFocusPolicy(Qt::NoFocus
);
114 QHBoxLayout
*hb
= new QHBoxLayout();
118 scrollbar
= new QScrollBar();
119 scrollbar
->setFocusPolicy(Qt::NoFocus
);
122 hb
->addWidget(scrollbar
);
123 QWidget
*cc
= new QWidget();
126 vb
->addWidget(file_tabs
);
128 QWidget
*mc
= new QWidget();
131 setCentralWidget(mc
);
133 connect(scrollbar
, SIGNAL(valueChanged(int)),
134 area
, SLOT(from_scrollbar(int)));
136 connect(file_tabs
, SIGNAL(currentChanged(int)),
137 area
, SLOT(from_filetabs(int)));
139 connect(menubar
, SIGNAL(triggered(QAction
*)),
140 area
, SLOT(from_menu(QAction
*)));
142 this->setWindowIcon(QIcon(QPixmap(mp_xpm
)));
144 settings
= new QSettings("triptico.com", "MinimumProfit");
146 QPoint pos
= settings
->value("pos", QPoint(20, 20)).toPoint();
147 QSize size
= settings
->value("size", QSize(600, 400)).toSize();
154 static void save_settings(MPWindow
*w
)
156 w
->settings
->setValue("pos", w
->pos());
157 w
->settings
->setValue("size", w
->size());
162 bool MPWindow::queryExit(void)
164 mp_process_event(MPDM_LS(L
"close-window"));
168 return mp_exit_requested
? true : false;
172 bool MPWindow::event(QEvent
*event
)
174 /* do the processing */
175 bool r
= QWidget::event(event
);
177 if (mp_exit_requested
) {
186 /** driver functions **/
188 static mpdm_t
qt4_drv_alert(mpdm_t a
)
191 QMessageBox::information(0, "mp " VERSION
, str_to_qstring(mpdm_aget(a
, 0)));
197 static mpdm_t
qt4_drv_confirm(mpdm_t a
)
202 r
= QMessageBox::question(0, "mp" VERSION
,
203 str_to_qstring(mpdm_aget(a
, 0)),
204 QMessageBox::Yes
| QMessageBox::No
| QMessageBox::Cancel
208 case QMessageBox::Yes
:
212 case QMessageBox::No
:
216 case QMessageBox::Cancel
:
225 static mpdm_t
qt4_drv_openfile(mpdm_t a
)
230 getcwd(tmp
, sizeof(tmp
));
233 r
= QFileDialog::getOpenFileName(window
,
234 str_to_qstring(mpdm_aget(a
, 0)), tmp
);
236 return qstring_to_str(r
);
240 static mpdm_t
qt4_drv_savefile(mpdm_t a
)
245 getcwd(tmp
, sizeof(tmp
));
248 r
= QFileDialog::getSaveFileName(window
,
249 str_to_qstring(mpdm_aget(a
, 0)), tmp
);
251 return qstring_to_str(r
);
255 static mpdm_t
qt4_drv_form(mpdm_t a
)
262 QDialog
*dialog
= new QDialog(window
);
264 dialog
->setModal(true);
266 widget_list
= mpdm_aget(a
, 0);
268 QWidget
*form
= new QWidget();
269 QFormLayout
*fl
= new QFormLayout();
271 for (n
= 0; n
< mpdm_size(widget_list
); n
++) {
272 mpdm_t w
= mpdm_aget(widget_list
, n
);
275 QLabel
*ql
= new QLabel("");
277 type
= mpdm_string(mpdm_hget_s(w
, L
"type"));
279 if ((t
= mpdm_hget_s(w
, L
"label")) != NULL
) {
280 ql
->setText(str_to_qstring(mpdm_gettext(t
)));
283 t
= mpdm_hget_s(w
, L
"value");
285 if (wcscmp(type
, L
"text") == 0) {
287 QComboBox
*qc
= new QComboBox();
289 qc
->setEditable(true);
290 qc
->setMinimumContentsLength(30);
291 qc
->setMaxVisibleItems(8);
294 qc
->setEditText(str_to_qstring(t
));
298 if ((h
= mpdm_hget_s(w
, L
"history")) != NULL
) {
301 /* has history; fill it */
302 h
= mp_get_history(h
);
304 for (i
= mpdm_size(h
) - 1; i
>= 0; i
--)
305 qc
->addItem(str_to_qstring(mpdm_aget(h
, i
)));
311 if (wcscmp(type
, L
"password") == 0) {
312 QLineEdit
*qe
= new QLineEdit();
314 qe
->setEchoMode(QLineEdit::Password
);
321 if (wcscmp(type
, L
"checkbox") == 0) {
322 QCheckBox
*qc
= new QCheckBox();
325 qc
->setCheckState(Qt::Checked
);
332 if (wcscmp(type
, L
"list") == 0) {
334 QListWidget
*qlw
= new QListWidget();
335 qlw
->setMinimumWidth(480);
337 /* use a monospaced font */
338 qlw
->setFont(QFont(QString("Mono")));
340 mpdm_t l
= mpdm_hget_s(w
, L
"list");
342 for (i
= 0; i
< mpdm_size(l
); i
++)
343 qlw
->addItem(str_to_qstring(mpdm_aget(l
, i
)));
345 qlw
->setCurrentRow(mpdm_ival(t
));
353 qlist
[n
]->setFocus(Qt::OtherFocusReason
);
358 QDialogButtonBox
*bb
= new QDialogButtonBox(QDialogButtonBox::Ok
|
359 QDialogButtonBox::Cancel
);
361 /* connect(bb, SIGNAL(accepted()), dialog, SLOT(accept()));
362 connect(bb, SIGNAL(rejected()), dialog, SLOT(reject()));
364 QVBoxLayout
*ml
= new QVBoxLayout();
368 dialog
->setLayout(ml
);
375 r
= MPDM_A(mpdm_size(widget_list
));
377 /* fill the return values */
378 for (n
= 0; n
< mpdm_size(widget_list
); n
++) {
379 mpdm_t w
= mpdm_aget(widget_list
, n
);
383 type
= mpdm_string(mpdm_hget_s(w
, L
"type"));
385 if (wcscmp(type
, L
"text") == 0) {
387 QComboBox
*ql
= (QComboBox
*)qlist
[n
];
389 v
= qstring_to_str(ql
->currentText());
391 /* if it has history, add to it */
392 if ((h
= mpdm_hget_s(w
, L
"history")) != NULL
&&
393 v
!= NULL
&& mpdm_cmp(v
, MPDM_LS(L
"")) != 0) {
394 h
= mp_get_history(h
);
396 if (mpdm_cmp(v
, mpdm_aget(h
, -1)) != 0)
401 if (wcscmp(type
, L
"password") == 0) {
402 QLineEdit
*ql
= (QLineEdit
*)qlist
[n
];
404 v
= qstring_to_str(ql
->text());
407 if (wcscmp(type
, L
"checkbox") == 0) {
408 QCheckBox
*qb
= (QCheckBox
*)qlist
[n
];
410 v
= MPDM_I(qb
->checkState() == Qt::Checked
);
413 if (wcscmp(type
, L
"list") == 0) {
414 QListWidget
*ql
= (QListWidget
*)qlist
[n
];
416 v
= MPDM_I(ql
->currentRow());
426 static void register_functions(void)
430 drv
= mpdm_hget_s(mp
, L
"drv");
431 mpdm_hset_s(drv
, L
"main_loop", MPDM_X(qt4_drv_main_loop
));
432 mpdm_hset_s(drv
, L
"shutdown", MPDM_X(qt4_drv_shutdown
));
434 mpdm_hset_s(drv
, L
"clip_to_sys", MPDM_X(qt4_drv_clip_to_sys
));
435 mpdm_hset_s(drv
, L
"sys_to_clip", MPDM_X(qt4_drv_sys_to_clip
));
436 mpdm_hset_s(drv
, L
"update_ui", MPDM_X(qt4_drv_update_ui
));
437 /* mpdm_hset_s(drv, L"timer", MPDM_X(qt4_drv_timer));*/
438 mpdm_hset_s(drv
, L
"busy", MPDM_X(qt4_drv_busy
));
440 mpdm_hset_s(drv
, L
"alert", MPDM_X(qt4_drv_alert
));
441 mpdm_hset_s(drv
, L
"confirm", MPDM_X(qt4_drv_confirm
));
442 mpdm_hset_s(drv
, L
"openfile", MPDM_X(qt4_drv_openfile
));
443 mpdm_hset_s(drv
, L
"savefile", MPDM_X(qt4_drv_savefile
));
444 mpdm_hset_s(drv
, L
"form", MPDM_X(qt4_drv_form
));
448 static mpdm_t
qt4_drv_startup(mpdm_t a
)
449 /* driver initialization */
451 register_functions();
456 window
= new MPWindow();
462 extern "C" Display
*XOpenDisplay(char *);
464 extern "C" int qt4_drv_detect(int * argc
, char *** argv
)
467 Display
*x11_display
;
469 /* try connecting directly to the Xserver */
470 if ((x11_display
= XOpenDisplay((char *)NULL
)) == NULL
)
473 /* this is where it crashes if no X server */
474 app
= new QApplication(x11_display
);
476 drv
= mpdm_hget_s(mp
, L
"drv");
477 mpdm_hset_s(drv
, L
"id", MPDM_LS(L
"qt4"));
478 mpdm_hset_s(drv
, L
"startup", MPDM_X(qt4_drv_startup
));
483 #include "mpv_qt4.moc"