/**
- * \file Toolbar_pimpl.C
+ * \file xforms/Toolbar_pimpl.C
* Copyright 1995 Matthias Ettrich
- * Copyright 1995-2001 The LyX Team.
* Copyright 1996-1998 Lars Gullik Bjønnes
- * See the file COPYING.
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
*
- * \author Lars Gullik Bjønnes, larsbj@lyx.org
+ * \author Lars Gullik Bjønnes
+ *
+ * Full author contact details are available in file CREDITS
*/
// Added pseudo-action handling, asierra 180296
#include <config.h>
-#ifdef __GNUG__
-#pragma implementation
-#endif
#include "Toolbar_pimpl.h"
#include "debug.h"
#include "FuncStatus.h"
#include "buffer.h"
#include "funcrequest.h"
-#include "MathsSymbols.h"
#include "gettext.h"
#include "Tooltips.h"
#include FORMS_H_LOCATION
#include "combox.h"
-#include "ToolbarDefaults.h"
+#include "ToolbarBackend.h"
+#include "xforms_helpers.h"
+
#include "LyXAction.h"
#include "support/LAssert.h"
// If we already have an icon, release it.
// But we don't copy the icon from ti
kill_icon();
-
+
action = ti.action;
return *this;
Toolbar::Pimpl::Pimpl(LyXView * o, int x, int y)
- : owner_(static_cast<XFormsView *>(o)), xpos(x), ypos(y)
+ : owner_(static_cast<XFormsView *>(o)), combox_(0), xpos(x), ypos(y)
{
- combox_ = 0;
tooltip_ = new Tooltips();
}
//toollist.clear();
toollist_.erase(toollist_.begin(), toollist_.end());
- delete combox_;
-
fl_unfreeze_form(owner_->getForm());
delete tooltip_;
}
ToolbarList::const_iterator p = toollist_.begin();
ToolbarList::const_iterator end = toollist_.end();
for (; p != end; ++p) {
- if (p->action == ToolbarDefaults::LAYOUTS && combox_) {
- if (owner_->getLyXFunc().getStatus(LFUN_LAYOUT).disabled())
- combox_->deactivate();
- else
- combox_->activate();
+ if (p->action == ToolbarBackend::LAYOUTS && combox_) {
+ LyXFunc const & lf = owner_->getLyXFunc();
+ bool const disable =
+ lf.getStatus(LFUN_LAYOUT).disabled();
+ setEnabled(combox_, !disable);
continue;
}
if (!p->icon)
continue;
-
+
FuncStatus const status = owner_->getLyXFunc().getStatus(p->action);
if (status.onoff(true)) {
// I'd like to use a different color
}
-// this one is not "C" because combox callbacks are really C++ %-|
-void Toolbar::Pimpl::layoutSelectedCB(int, void * arg, Combox *)
+namespace {
+
+void C_layoutSelectedCB(FL_OBJECT * ob, long)
{
- reinterpret_cast<Toolbar::Pimpl *>(arg)->layoutSelected();
+ if (!ob || !ob->u_vdata)
+ return;
+ Toolbar::Pimpl * ptr = static_cast<Toolbar::Pimpl *>(ob->u_vdata);
+ ptr->layoutSelected();
}
+} // namespace anon
+
void Toolbar::Pimpl::layoutSelected()
{
- string const & layoutguiname = combox_->getline();
+ if (!combox_)
+ return;
+
+ string const & layoutguiname = getString(combox_);
LyXTextClass const & tc =
owner_->buffer()->params.getLyXTextClass();
for (LyXTextClass::const_iterator cit = tc.begin();
cit != end; ++cit) {
if (_((*cit)->name()) == layoutguiname) {
- owner_->getLyXFunc().dispatch(FuncRequest(LFUN_LAYOUT, (*cit)->name()));
+ owner_->getLyXFunc().dispatch(FuncRequest(LFUN_LAYOUT, (*cit)->name()), true);
return;
}
}
void Toolbar::Pimpl::setLayout(string const & layout)
{
- if (combox_) {
- LyXTextClass const & tc =
- owner_->buffer()->params.getLyXTextClass();
- combox_->select(_(tc[layout]->name()));
+ if (!combox_)
+ return;
+
+ LyXTextClass const & tc = owner_->buffer()->params.getLyXTextClass();
+ string const layoutname = _(tc[layout]->name());
+
+ int const nnames = fl_get_combox_maxitems(combox_);
+ for (int i = 1; i <= nnames; ++i) {
+ string const name = fl_get_combox_line(combox_, i);
+ if (name == layoutname) {
+ fl_set_combox(combox_, i);
+ break;
+ }
}
}
void Toolbar::Pimpl::updateLayoutList(bool force)
{
- // Update the layout display
- if (!combox_) return;
+ if (!combox_)
+ return;
// If textclass is different, we need to update the list
- if (combox_->empty() || force) {
- combox_->clear();
+ if (fl_get_combox_maxitems(combox_) == 0 || force) {
+ fl_clear_combox(combox_);
LyXTextClass const & tc =
owner_->buffer()->params.getLyXTextClass();
LyXTextClass::const_iterator end = tc.end();
for (LyXTextClass::const_iterator cit = tc.begin();
cit != end; ++cit) {
// ignore obsolete entries
- if ((*cit)->obsoleted_by().empty())
- combox_->addline(_((*cit)->name()));
+ if ((*cit)->obsoleted_by().empty()) {
+ string const & name = _((*cit)->name());
+ fl_addto_combox(combox_, name.c_str());
+ }
}
}
// we need to do this.
- combox_->redraw();
+ fl_redraw_object(combox_);
}
void Toolbar::Pimpl::clearLayoutList()
{
- if (combox_) {
- combox_->clear();
- combox_->redraw();
- }
+ if (!combox_)
+ return;
+
+ fl_clear_combox(combox_);
+ fl_redraw_object(combox_);
}
void Toolbar::Pimpl::openLayoutList()
{
- if (combox_)
- combox_->show();
+ if (!combox_)
+ return;
+
+ fl_show_combox_browser(combox_);
}
extern "C" {
- static
- void C_Toolbar_ToolbarCB(FL_OBJECT * ob, long data)
- {
- ToolbarCB(ob, data);
- }
+void C_Toolbar_ToolbarCB(FL_OBJECT * ob, long data)
+{
+ ToolbarCB(ob, data);
+}
}
-void setPixmap(FL_OBJECT * obj, int action, int buttonwidth, int height)
+void setPixmap(FL_OBJECT * obj, int action)
{
string xpm_name;
FuncRequest ev = lyxaction.retrieveActionArg(action);
-
+
string const name = lyxaction.getActionName(ev.action);
if (!ev.argument.empty())
xpm_name = subst(name + ' ' + ev.argument, ' ','_');
string fullname = LibFileSearch("images", xpm_name, "xpm");
+ if (ev.action == LFUN_INSERT_MATH && !ev.argument.empty()) {
+ string arg = ev.argument.substr(1);
+ fullname = LibFileSearch("images/math/", arg, "xpm");
+ }
+
if (!fullname.empty()) {
lyxerr[Debug::GUI] << "Full icon name is `"
- << fullname << "'" << endl;
+ << fullname << '\'' << endl;
fl_set_pixmapbutton_file(obj, fullname.c_str());
return;
}
- if (ev.action == LFUN_INSERT_MATH && !ev.argument.empty()) {
- char const ** pixmap = get_pixmap_from_symbol(ev.argument.c_str(),
- buttonwidth,
- height);
- if (pixmap) {
- lyxerr[Debug::GUI] << "Using mathed-provided icon"
- << endl;
- fl_set_pixmapbutton_data(obj,
- const_cast<char **>(pixmap));
- return;
- }
- }
-
- lyxerr << "Unable to find icon `" << xpm_name << "'" << endl;
+ lyxerr << "Unable to find icon `" << xpm_name << '\'' << endl;
fullname = LibFileSearch("images", "unknown", "xpm");
if (!fullname.empty()) {
lyxerr[Debug::GUI] << "Using default `unknown' icon"
void Toolbar::Pimpl::add(int action)
{
- FL_OBJECT * obj;
-
toolbarItem item;
item.action = action;
-
+
switch (action) {
- case ToolbarDefaults::SEPARATOR:
+ case ToolbarBackend::SEPARATOR:
xpos += sepspace;
break;
- case ToolbarDefaults::NEWLINE:
+ case ToolbarBackend::NEWLINE:
// Not supported yet.
break;
- case ToolbarDefaults::LAYOUTS:
+ case ToolbarBackend::LAYOUTS:
xpos += standardspacing;
- if (!combox_)
- combox_ = new Combox(FL_COMBOX_DROPLIST);
- combox_->add(xpos, ypos, 135, height, 400);
- combox_->setcallback(layoutSelectedCB, this);
- combox_->resize(FL_RESIZE_ALL);
- combox_->gravity(NorthWestGravity, NorthWestGravity);
+ if (combox_)
+ break;
+
+ combox_ = fl_add_combox(FL_DROPLIST_COMBOX,
+ xpos, ypos, 135, height, "");
+ fl_set_combox_browser_height(combox_, 400);
+ fl_set_object_boxtype(combox_, FL_DOWN_BOX);
+ fl_set_object_color(combox_, FL_MCOL, FL_MCOL);
+ fl_set_object_gravity(combox_, FL_NorthWest, FL_NorthWest);
+ fl_set_object_resize(combox_, FL_RESIZE_ALL);
+
+ combox_->u_vdata = this;
+ fl_set_object_callback(combox_, C_layoutSelectedCB, 0);
xpos += 135;
break;
- default:
+ default: {
+ FL_OBJECT * obj;
+
xpos += standardspacing;
item.icon = obj =
fl_add_pixmapbutton(FL_NORMAL_BUTTON,
// The view that this object belongs to.
obj->u_vdata = owner_;
- setPixmap(obj, action, buttonwidth, height);
+ setPixmap(obj, action);
// we must remember to update the positions
xpos += buttonwidth;
// ypos is constant
*/
break;
}
-
+ }
+
toollist_.push_back(item);
}