-// -*- C++ -*-
/*
* Combox: A combination of two objects (a button and a browser) is
* encapsulated to get a combobox-like object. All XForms
#endif
#include "combox.h"
-#include <cstring>
+//#include <cstring>
#include "debug.h"
// These are C wrappers around static members of Combox, used as
// callbacks for xforms.
-extern "C" void C_Combox_input_cb(FL_OBJECT *ob, long);
-extern "C" void C_Combox_combo_cb(FL_OBJECT *ob, long data) ;
-extern "C" int C_Combox_peek_event(FL_FORM * form, void *xev);
+extern "C" {
+
+ static
+ void C_Combox_input_cb(FL_OBJECT * ob, long data)
+ {
+ Combox::input_cb(ob, data);
+ }
+
+ static
+ void C_Combox_combo_cb(FL_OBJECT * ob, long data)
+ {
+ Combox::combo_cb(ob, data);
+ }
+
+ static
+ int C_Combox_peek_event(FL_FORM * form, void *xev)
+ {
+ return Combox::peek_event(form, xev);
+ }
+
+}
+
Combox::Combox(combox_type t)
: type(t), tabfolder1(0), tabfolder2(0)
void Combox::remove()
{
- lyxerr.debug() << "Button: " << button << endl;
+ lyxerr[Debug::GUI] << "Button: " << button << endl;
if (button) {
fl_delete_object(button);
fl_free_object(button);
}
- lyxerr.debug() << "Label: " << label << endl;
+ lyxerr[Debug::GUI] << "Label: " << label << endl;
if (label && label != button) {
fl_delete_object(label);
fl_free_object(label);
}
- lyxerr.debug() << "Form: " << form << endl;
- lyxerr.debug() << "Browser: " << browser << endl;
+ lyxerr[Debug::GUI] << "Form: " << form << endl;
+ lyxerr[Debug::GUI] << "Browser: " << browser << endl;
if (form && browser) {
fl_delete_object(browser);
fl_free_object(browser);
}
-bool Combox::select_text(string const & t)
+bool Combox::select(string const & t)
{
if (!browser || t.empty()) return false;
int const maxline = fl_get_browser_maxline(browser);
void Combox::add(int x, int y, int w, int hmin, int hmax,
FL_OBJECT * tabfolder1_, FL_OBJECT * tabfolder2_)
{
- // Store these for later use in working round an xforms bug in Show()
+ // Store these for later use in working round an xforms bug in show()
tabfolder1 = tabfolder1_;
tabfolder2 = tabfolder2_;
}
-static Window save_window;
+namespace {
+
+Window save_window;
+} // namespace anon
-void Combox::Redraw()
+
+void Combox::redraw()
{
if (browser) fl_redraw_object(browser);
if (button) fl_redraw_object(button);
if (label) fl_redraw_object(label);
}
-void Combox::Show()
+void Combox::show()
{
if (_pre) _pre();
XFlush(fl_get_display());
}
-void Combox::Hide(int who)
+void Combox::hide(int who)
{
if (!who && browser && label) {
sel = fl_get_browser(browser);
}
XUngrabPointer(fl_get_display(), 0);
XFlush(fl_get_display());
- if (!who && browser && label && callback)
- callback(sel, cb_arg, this);
if (form) {
fl_hide_form(form);
XSetInputFocus(fl_get_display(), save_window,
fl_redraw_object(button);
}
}
+ if (!who && browser && label && callback)
+ callback(sel, cb_arg, this);
if (_post) _post();
}
void Combox::activate()
{
- if (browser) fl_activate_object(browser);
- if (button) fl_activate_object(button);
- if (label) fl_activate_object(label);
+ if (browser)
+ fl_activate_object(browser);
+ if (button) {
+ fl_activate_object(button);
+ fl_set_object_lcol(button, FL_BLACK);
+ }
+ if (label) {
+ fl_activate_object(label);
+ fl_set_object_lcol(label, FL_BLACK);
+ }
}
void Combox::deactivate()
{
- if (browser) fl_deactivate_object(browser);
- if (button) fl_deactivate_object(button);
- if (label) fl_deactivate_object(label);
+ if (browser)
+ fl_deactivate_object(browser);
+ if (button) {
+ fl_deactivate_object(button);
+ fl_set_object_lcol(button, FL_INACTIVE);
+ }
+ if (label) {
+ fl_deactivate_object(label);
+ fl_set_object_lcol(label, FL_INACTIVE);
+ }
}
}
-extern "C" void C_Combox_input_cb(FL_OBJECT * ob, long data)
-{
- Combox::input_cb(ob, data);
-}
-
-
void Combox::combo_cb(FL_OBJECT * ob, long data)
{
Combox * combo = static_cast<Combox*>(ob->u_vdata);
combo->cb_arg, combo);
break;
}
- default: combo->Show(); break;
+ default: combo->show(); break;
}
break;
}
case 2:
- combo->Hide();
+ combo->hide();
break;
}
}
-extern "C" void C_Combox_combo_cb(FL_OBJECT * ob, long data)
-{
- Combox::combo_cb(ob, data);
-}
-
int Combox::peek_event(FL_FORM * form, void * xev)
{
FL_OBJECT * ob = static_cast<FL_OBJECT *>(form->u_vdata);
Combox * combo = static_cast<Combox*>(ob->u_vdata);
- // I don't know why belowmouse does not work, but it doesn't. (Asger)
- // Are we sure? Please verify. (Lgb)
+ // below mouse does not work like we need it
if (static_cast<XEvent *>(xev)->type == ButtonPress && (
static_cast<XEvent *>(xev)->xbutton.x - ob->x < 0 ||
static_cast<XEvent *>(xev)->xbutton.x - ob->x > ob->w ||
static_cast<XEvent *>(xev)->xbutton.y - ob->y < 0 ||
static_cast<XEvent *>(xev)->xbutton.y - ob->y > ob->h)) {
- combo->Hide(1);
+ combo->hide(1);
return 1;
}
fl_get_browser(combo->browser));
return 1;
case XK_Return:
- combo->Hide();
+ combo->hide();
return 1;
case XK_Escape:
- combo->Hide(1);
+ combo->hide(1);
return 1;
}
return 0;
}
-
-extern "C" int C_Combox_peek_event(FL_FORM * form, void *xev)
-{
- return Combox::peek_event(form, xev);
-}
#ifdef TESTCOMBO