// -*- C++ -*- /* * Combox: A combination of two objects (a button and a browser) is * encapsulated to get a combobox-like object. All XForms * functions are hidden. * * GNU Copyleft (C) 1996 Alejandro Aguilar Sierra <asierra@servidor.unam.mx> * and the LyX Team. * * Dependencies: Only XForms, but created to be used with LyX. *
*/
/* Change log: * * 2/06/1996, Alejandro Aguilar Sierra * Created and tested. * * 4/06/1996, Alejandro Aguilar Sierra * Added droplist mode (a button with a black down arrow at right) * and support for middle and right buttons, as XForms choice object. * * 6/06/1996, Lars Gullik Bjønnes * Added a combox with an input object. and a pre and a post handle. * * 22/07/96, Alejandro Aguilar Sierra * Assigned to the browser its own popup window. No more need of * external pre and post handlers to simulate the wanted behaviour. *
*/
void Combox::addline(charconst* text)
{ if (!browser) return;
fl_add_browser_line(browser, text);
// By default the first item is selected if (!sel) {
sel = 1; if (type == FL_COMBOX_INPUT)
fl_set_input(label, text); else
fl_set_object_label(label, text);
}
is_empty = false;
}
bool Combox::select_text(charconst* t)
{ if (!browser || !t) returnfalse; for (int i=1; i<=fl_get_browser_maxline(browser); i++) { if (!strcmp(t, fl_get_browser_line(browser, i))) {
select(i); returntrue;
}
} returnfalse; // t does not exist in browser
}
void Combox::select(int i)
{ if (!browser || !button) return; if (i>0 && i<=fl_get_browser_maxline(browser)) sel = i;
fl_deactivate_object(button);
// Hmm, it seems fl_create_browser is broken in xforms 0.86. // We have to work around that by creating the dropped browser form // at this point already. However, this means that we have // to do a little hacking: (Asger)
FL_FORM * current_form = fl_current_form;
fl_end_form();
// And revert to adding to the old form (Asger)
fl_addto_form(current_form);
}
static Window save_window;
void Combox::Redraw()
{ if (browser) fl_redraw_object(browser); if (button) fl_redraw_object(button); if (label) fl_redraw_object(label);
}
void Combox::Show()
{ if (_pre) _pre();
int tmp;
XGetInputFocus(fl_display, &save_window, &tmp); //BUG-Fix Dietmar
XFlush(fl_display); if (button && type != FL_COMBOX_NORMAL) {
fl_set_object_label(button, "@2<-");
fl_redraw_object(button);
} int x = label->form->x + label->x, y = label->form->y + label->y;
fl_set_form_position(form, x, y + label->h);
fl_show_form(form, FL_PLACE_POSITION, FL_NOBORDER, ""); if (sel>0) {
fl_set_browser_topline(browser, sel);
fl_select_browser_line(browser, sel);
}
XGrabPointer(fl_display, form->window, false,
ButtonPressMask | ButtonReleaseMask | PointerMotionMask,
GrabModeAsync, GrabModeAsync,
0, 0,0);
XFlush(fl_display);
}
void Combox::Hide(int who)
{ if (!who && browser && label) {
sel = fl_get_browser(browser);
if (type == FL_COMBOX_INPUT)
fl_set_input(label, fl_get_browser_line(browser, sel)); else
fl_set_object_label(label,
fl_get_browser_line(browser, sel)); if (callback) callback(sel,cb_arg);
}
XUngrabPointer(fl_display, 0);
XFlush(fl_display); if (form) {
fl_hide_form(form);
XSetInputFocus(fl_display, save_window,
RevertToParent, CurrentTime); // BUG-FIX-Dietmar
XFlush(fl_display);
} if (button) { if (type != FL_COMBOX_NORMAL){
fl_set_object_label(button, "@2->");
fl_redraw_object(button);
}
} if (_post) _post();
}
void Combox::activate()
{ if (browser) fl_activate_object(browser); if (button) fl_activate_object(button); if (label) fl_activate_object(label);
}
void Combox::deactivate()
{ if (browser) fl_deactivate_object(browser); if (button) fl_deactivate_object(button); if (label) fl_deactivate_object(label);
}
/* show the first form */
fl_show_form(fd_test->test,FL_PLACE_CENTER,FL_FULLBORDER,"test");
fl_do_forms(); return 0;
}
#endif
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.17Bemerkung:
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.