]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/xforms/combox.C
Bugfixes: checkboxes to radiobuttons (from J�rgen S) and remove a little
[lyx.git] / src / frontends / xforms / combox.C
index 2ed33651d3d693be98546e4858e9d2e8bf207598..188b5cff716b80992f26489497ffaa5fcb2c233a 100644 (file)
@@ -1,4 +1,3 @@
-// -*- C++ -*-
 /*
  *  Combox: A combination of two objects (a button and a browser) is
  *          encapsulated to get a combobox-like object. All XForms 
@@ -36,7 +35,7 @@
 #endif
 
 #include "combox.h"
-#include <cstring>
+//#include <cstring>
 
 #include "debug.h"
 
@@ -44,9 +43,28 @@ using std::endl;
 
 // 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)
@@ -82,20 +100,20 @@ void Combox::clear()
 
 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);
@@ -127,7 +145,7 @@ void Combox::addline(string const & text)
 }
 
 
-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);
@@ -159,7 +177,7 @@ void Combox::select(int i)
 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_;
 
@@ -237,17 +255,21 @@ void Combox::add(int x, int y, int w, int hmin, int hmax,
 }
 
 
-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();
        
@@ -302,7 +324,7 @@ void Combox::Show()
        XFlush(fl_get_display());
 }
 
-void Combox::Hide(int who)
+void Combox::hide(int who)
 {  
        if (!who && browser && label) {
                sel = fl_get_browser(browser);
@@ -316,8 +338,6 @@ void Combox::Hide(int who)
        }
         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,
@@ -330,23 +350,39 @@ void Combox::Hide(int who)
                        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);
+       }
 }
 
 
@@ -361,12 +397,6 @@ void Combox::input_cb(FL_OBJECT * ob, long)
 }
 
 
-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);
@@ -391,35 +421,29 @@ void Combox::combo_cb(FL_OBJECT * ob, long data)
                                                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;
        }
                
@@ -463,19 +487,14 @@ int Combox::peek_event(FL_FORM * form, void * xev)
                                               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