mirror of
https://git.lyx.org/repos/lyx.git
synced 2025-01-04 16:42:57 +00:00
The Box patch
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@7865 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
eb36b71ce3
commit
800c0dfc38
@ -1,3 +1,8 @@
|
|||||||
|
2003-10-07 Martin Vermeer <martin.vermeer@hut.fi>
|
||||||
|
|
||||||
|
* ui/stdmenus.ui: The Box patch. Fancybox support, minipage,
|
||||||
|
parbox
|
||||||
|
|
||||||
2003-10-06 José Matoa <jamatos@lyx.org>
|
2003-10-06 José Matoa <jamatos@lyx.org>
|
||||||
|
|
||||||
* lyxrevert_223.py: finish support for change tracking revert.
|
* lyxrevert_223.py: finish support for change tracking revert.
|
||||||
|
@ -101,10 +101,10 @@ Menuset
|
|||||||
OptItem "TeX Code Settings...|C" "inset-settings ert"
|
OptItem "TeX Code Settings...|C" "inset-settings ert"
|
||||||
# 'a' shortcut to match Insert entry, shouldn't clash with Table Settings
|
# 'a' shortcut to match Insert entry, shouldn't clash with Table Settings
|
||||||
OptItem "Float Settings...|a" "inset-settings float"
|
OptItem "Float Settings...|a" "inset-settings float"
|
||||||
OptItem "Minipage Settings...|M" "inset-settings minipage"
|
|
||||||
OptItem "Text Wrap Settings...|W" "inset-settings wrap"
|
OptItem "Text Wrap Settings...|W" "inset-settings wrap"
|
||||||
OptItem "Note Settings...|N" "inset-settings note"
|
OptItem "Note Settings...|N" "inset-settings note"
|
||||||
OptItem "Branch Settings...|B" "inset-settings branch"
|
OptItem "Branch Settings...|B" "inset-settings branch"
|
||||||
|
OptItem "Box Settings...|x" "inset-settings box"
|
||||||
# Hey, guess what's broken ? Surprise surprise, it's tabular stuff
|
# Hey, guess what's broken ? Surprise surprise, it's tabular stuff
|
||||||
# This is in the Table submenu instead for now.
|
# This is in the Table submenu instead for now.
|
||||||
# OptItem "Table Settings...|a" "inset-settings tabular"
|
# OptItem "Table Settings...|a" "inset-settings tabular"
|
||||||
@ -229,6 +229,7 @@ Menuset
|
|||||||
Submenu "Float|a" "insert_float"
|
Submenu "Float|a" "insert_float"
|
||||||
# YUCK
|
# YUCK
|
||||||
Submenu "Note|N" "insert_note"
|
Submenu "Note|N" "insert_note"
|
||||||
|
Submenu "Box" "insert_box"
|
||||||
Submenu "Branch|B" "branches"
|
Submenu "Branch|B" "branches"
|
||||||
Submenu "File|e" "insert_file"
|
Submenu "File|e" "insert_file"
|
||||||
Separator
|
Separator
|
||||||
@ -243,7 +244,6 @@ Menuset
|
|||||||
Item "URL...|U" "url-insert"
|
Item "URL...|U" "url-insert"
|
||||||
Item "Footnote|F" "footnote-insert"
|
Item "Footnote|F" "footnote-insert"
|
||||||
Item "Marginal Note|M" "marginalnote-insert"
|
Item "Marginal Note|M" "marginalnote-insert"
|
||||||
Item "Minipage|p" "minipage-insert"
|
|
||||||
Item "Short Title" "optional-insert"
|
Item "Short Title" "optional-insert"
|
||||||
Item "TeX|X" "ert-insert"
|
Item "TeX|X" "ert-insert"
|
||||||
End
|
End
|
||||||
@ -339,6 +339,15 @@ Menuset
|
|||||||
Item "Greyed Out|G" "note-insert Greyedout"
|
Item "Greyed Out|G" "note-insert Greyedout"
|
||||||
End
|
End
|
||||||
|
|
||||||
|
Menu "insert_box"
|
||||||
|
Item "Frameless|F" "box-insert Frameless"
|
||||||
|
Item "Boxed|B" "box-insert Boxed"
|
||||||
|
Item "Oval Box|O" "box-insert ovalbox"
|
||||||
|
Item "Oval Box, Thick|T" "box-insert Ovalbox"
|
||||||
|
Item "Shadow Box|S" "box-insert Shadowbox"
|
||||||
|
Item "Double Box|D" "box-insert Doublebox"
|
||||||
|
End
|
||||||
|
|
||||||
Menu "branches"
|
Menu "branches"
|
||||||
Branches
|
Branches
|
||||||
End
|
End
|
||||||
|
@ -18,6 +18,7 @@ src/format.C
|
|||||||
src/frontends/LyXView.C
|
src/frontends/LyXView.C
|
||||||
src/frontends/controllers/ControlAboutlyx.C
|
src/frontends/controllers/ControlAboutlyx.C
|
||||||
src/frontends/controllers/ControlBibtex.C
|
src/frontends/controllers/ControlBibtex.C
|
||||||
|
src/frontends/controllers/ControlBox.C
|
||||||
src/frontends/controllers/ControlDocument.C
|
src/frontends/controllers/ControlDocument.C
|
||||||
src/frontends/controllers/ControlExternal.C
|
src/frontends/controllers/ControlExternal.C
|
||||||
src/frontends/controllers/ControlGraphics.C
|
src/frontends/controllers/ControlGraphics.C
|
||||||
@ -93,6 +94,7 @@ src/frontends/xforms/FormAboutlyx.C
|
|||||||
src/frontends/xforms/FormBase.C
|
src/frontends/xforms/FormBase.C
|
||||||
src/frontends/xforms/FormBibitem.C
|
src/frontends/xforms/FormBibitem.C
|
||||||
src/frontends/xforms/FormBibtex.C
|
src/frontends/xforms/FormBibtex.C
|
||||||
|
src/frontends/xforms/FormBox.C
|
||||||
src/frontends/xforms/FormBranch.C
|
src/frontends/xforms/FormBranch.C
|
||||||
src/frontends/xforms/FormChanges.C
|
src/frontends/xforms/FormChanges.C
|
||||||
src/frontends/xforms/FormCharacter.C
|
src/frontends/xforms/FormCharacter.C
|
||||||
@ -142,6 +144,7 @@ src/gettext.h
|
|||||||
src/importer.C
|
src/importer.C
|
||||||
src/insets/inset.C
|
src/insets/inset.C
|
||||||
src/insets/insetbibtex.C
|
src/insets/insetbibtex.C
|
||||||
|
src/insets/insetbox.C
|
||||||
src/insets/insetbranch.C
|
src/insets/insetbranch.C
|
||||||
src/insets/insetcaption.C
|
src/insets/insetcaption.C
|
||||||
src/insets/insetenv.C
|
src/insets/insetenv.C
|
||||||
@ -185,6 +188,7 @@ src/mathed/ref_inset.C
|
|||||||
src/paragraph.C
|
src/paragraph.C
|
||||||
src/paragraph_funcs.C
|
src/paragraph_funcs.C
|
||||||
src/rowpainter.C
|
src/rowpainter.C
|
||||||
|
src/support/path_defines.C
|
||||||
src/text.C
|
src/text.C
|
||||||
src/text2.C
|
src/text2.C
|
||||||
src/text3.C
|
src/text3.C
|
||||||
|
@ -1,4 +1,13 @@
|
|||||||
<<<<<<< ChangeLog
|
|
||||||
|
2003-10-07 Martin Vermeer <martin.vermeer@hut.fi>
|
||||||
|
|
||||||
|
* LaTeXFeatures.C:
|
||||||
|
* LyXAction.C:
|
||||||
|
* factory.C:
|
||||||
|
* lfuns.h:
|
||||||
|
* lyxfunc.C:
|
||||||
|
* text3.C: The Box patch. Fancybox support, minipage, parbox
|
||||||
|
|
||||||
2003-10-07 Martin Vermeer <martin.vermeer@hut.fi>
|
2003-10-07 Martin Vermeer <martin.vermeer@hut.fi>
|
||||||
|
|
||||||
* CutAndPaste.h:
|
* CutAndPaste.h:
|
||||||
|
@ -189,7 +189,9 @@ char const * simplefeatures[] = {
|
|||||||
"prettyref",
|
"prettyref",
|
||||||
"float",
|
"float",
|
||||||
"wasy",
|
"wasy",
|
||||||
"dvipost"
|
"dvipost",
|
||||||
|
"fancybox",
|
||||||
|
"calc"
|
||||||
};
|
};
|
||||||
|
|
||||||
int const nb_simplefeatures = sizeof(simplefeatures) / sizeof(char const *);
|
int const nb_simplefeatures = sizeof(simplefeatures) / sizeof(char const *);
|
||||||
|
@ -225,6 +225,7 @@ void LyXAction::init()
|
|||||||
{ LFUN_INSET_MINIPAGE, "minipage-insert", Noop },
|
{ LFUN_INSET_MINIPAGE, "minipage-insert", Noop },
|
||||||
{ LFUN_INSERT_BRANCH, "branch-insert", Noop },
|
{ LFUN_INSERT_BRANCH, "branch-insert", Noop },
|
||||||
{ LFUN_INSERT_NOTE, "note-insert", Noop },
|
{ LFUN_INSERT_NOTE, "note-insert", Noop },
|
||||||
|
{ LFUN_INSERT_BOX, "box-insert", Noop },
|
||||||
{ LFUN_GOTONOTE, "note-next", ReadOnly },
|
{ LFUN_GOTONOTE, "note-next", ReadOnly },
|
||||||
{ LFUN_INSET_TOGGLE, "inset-toggle", ReadOnly },
|
{ LFUN_INSET_TOGGLE, "inset-toggle", ReadOnly },
|
||||||
{ LFUN_DOWN_PARAGRAPH, "paragraph-down", ReadOnly },
|
{ LFUN_DOWN_PARAGRAPH, "paragraph-down", ReadOnly },
|
||||||
|
@ -39,6 +39,7 @@
|
|||||||
#include "insets/insetmarginal.h"
|
#include "insets/insetmarginal.h"
|
||||||
#include "insets/insetminipage.h"
|
#include "insets/insetminipage.h"
|
||||||
#include "insets/insetnote.h"
|
#include "insets/insetnote.h"
|
||||||
|
#include "insets/insetbox.h"
|
||||||
#include "insets/insetbranch.h"
|
#include "insets/insetbranch.h"
|
||||||
#include "insets/insetoptarg.h"
|
#include "insets/insetoptarg.h"
|
||||||
#include "insets/insetref.h"
|
#include "insets/insetref.h"
|
||||||
@ -82,6 +83,13 @@ InsetOld * createInset(FuncRequest const & cmd)
|
|||||||
arg = "Note";
|
arg = "Note";
|
||||||
return new InsetNote(params, arg);
|
return new InsetNote(params, arg);
|
||||||
}
|
}
|
||||||
|
case LFUN_INSERT_BOX:
|
||||||
|
{
|
||||||
|
string arg = cmd.getArg(0);
|
||||||
|
if (arg.empty())
|
||||||
|
arg = "Boxed";
|
||||||
|
return new InsetBox(params, arg);
|
||||||
|
}
|
||||||
case LFUN_INSERT_BRANCH:
|
case LFUN_INSERT_BRANCH:
|
||||||
{
|
{
|
||||||
string arg = cmd.getArg(0);
|
string arg = cmd.getArg(0);
|
||||||
@ -375,6 +383,10 @@ InsetOld * readInset(LyXLex & lex, Buffer const & buf)
|
|||||||
} else if (tmptok == "Note" || tmptok == "Comment"
|
} else if (tmptok == "Note" || tmptok == "Comment"
|
||||||
|| tmptok == "Greyedout") {
|
|| tmptok == "Greyedout") {
|
||||||
inset = new InsetNote(buf.params(), tmptok);
|
inset = new InsetNote(buf.params(), tmptok);
|
||||||
|
} else if (tmptok == "Boxed" || tmptok == "ovalbox"
|
||||||
|
|| tmptok == "Shadowbox" || tmptok == "Doublebox"
|
||||||
|
|| tmptok == "Ovalbox" || tmptok == "Frameless") {
|
||||||
|
inset = new InsetBox(buf.params(), tmptok);
|
||||||
} else if (tmptok == "Branch") {
|
} else if (tmptok == "Branch") {
|
||||||
inset = new InsetBranch(buf.params(), string());
|
inset = new InsetBranch(buf.params(), string());
|
||||||
} else if (tmptok == "Include") {
|
} else if (tmptok == "Include") {
|
||||||
|
@ -1,3 +1,9 @@
|
|||||||
|
2003-10-07 Martin Vermeer <martin.vermeer@hut.fi>
|
||||||
|
|
||||||
|
* ControlBox.C:
|
||||||
|
* ControlBox.h:
|
||||||
|
* Makefile.am: The Box patch. Fancybox support, minipage, parbox
|
||||||
|
|
||||||
2003-10-07 Martin Vermeer <martin.vermeer@hut.fi>
|
2003-10-07 Martin Vermeer <martin.vermeer@hut.fi>
|
||||||
|
|
||||||
* BCView.h:
|
* BCView.h:
|
||||||
|
82
src/frontends/controllers/ControlBox.C
Normal file
82
src/frontends/controllers/ControlBox.C
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
/**
|
||||||
|
* \file ControlBox.C
|
||||||
|
* This file is part of LyX, the document processor.
|
||||||
|
* Licence details can be found in the file COPYING.
|
||||||
|
*
|
||||||
|
* \author Martin Vermeer (with useful hints from Angus Leeming)
|
||||||
|
*
|
||||||
|
* Full author contact details are available in file CREDITS.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
|
#include "ControlBox.h"
|
||||||
|
#include "funcrequest.h"
|
||||||
|
#include "insets/insetbox.h"
|
||||||
|
#include "gettext.h"
|
||||||
|
|
||||||
|
|
||||||
|
using std::string;
|
||||||
|
using std::vector;
|
||||||
|
|
||||||
|
|
||||||
|
ControlBox::ControlBox(Dialog & parent)
|
||||||
|
: Dialog::Controller(parent)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
bool ControlBox::initialiseParams(string const & data)
|
||||||
|
{
|
||||||
|
InsetBoxParams params("");
|
||||||
|
InsetBoxMailer::string2params(data, params);
|
||||||
|
params_.reset(new InsetBoxParams(params));
|
||||||
|
|
||||||
|
return true;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ControlBox::clearParams()
|
||||||
|
{
|
||||||
|
params_.reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ControlBox::dispatchParams()
|
||||||
|
{
|
||||||
|
string const lfun = InsetBoxMailer::params2string(params());
|
||||||
|
kernel().dispatch(FuncRequest(LFUN_INSET_APPLY, lfun));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void box_gui_tokens(vector<string> & ids, vector<string> & gui_names)
|
||||||
|
{
|
||||||
|
char const * const ids_[] = {
|
||||||
|
"Frameless", "Boxed", "ovalbox",
|
||||||
|
"Ovalbox", "Shadowbox", "Doublebox"};
|
||||||
|
size_t const ids_size = sizeof(ids_) / sizeof(char *);
|
||||||
|
ids = vector<string>(ids_, ids_ + ids_size);
|
||||||
|
gui_names.clear();
|
||||||
|
gui_names.push_back(_("No frame drawn"));
|
||||||
|
gui_names.push_back(_("Rectangular box"));
|
||||||
|
gui_names.push_back(_("Oval box, thin"));
|
||||||
|
gui_names.push_back(_("Oval box, thick"));
|
||||||
|
gui_names.push_back(_("Shadow box"));
|
||||||
|
gui_names.push_back(_("Double box"));
|
||||||
|
}
|
||||||
|
|
||||||
|
void box_gui_tokens_special_length(vector<string> & ids,
|
||||||
|
vector<string> & gui_names)
|
||||||
|
{
|
||||||
|
char const * const ids_[] = {
|
||||||
|
"none", "height", "depth",
|
||||||
|
"totalheight", "width"};
|
||||||
|
size_t const ids_size = sizeof(ids_) / sizeof(char *);
|
||||||
|
ids = vector<string>(ids_, ids_ + ids_size);
|
||||||
|
gui_names.clear();
|
||||||
|
gui_names.push_back(_("None"));
|
||||||
|
gui_names.push_back(_("Height"));
|
||||||
|
gui_names.push_back(_("Depth"));
|
||||||
|
gui_names.push_back(_("Total Height"));
|
||||||
|
gui_names.push_back(_("Width"));
|
||||||
|
}
|
49
src/frontends/controllers/ControlBox.h
Normal file
49
src/frontends/controllers/ControlBox.h
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
// -*- C++ -*-
|
||||||
|
/**
|
||||||
|
* \file ControlBox.h
|
||||||
|
* This file is part of LyX, the document processor.
|
||||||
|
* Licence details can be found in the file COPYING.
|
||||||
|
*
|
||||||
|
* \author Martin Vermeer (with useful hints from Angus Leeming)
|
||||||
|
*
|
||||||
|
* Full author contact details are available in file CREDITS.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef CONTROLBOX_H
|
||||||
|
#define CONTROLBOX_H
|
||||||
|
|
||||||
|
|
||||||
|
#include "Dialog.h"
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
class InsetBoxParams;
|
||||||
|
|
||||||
|
class ControlBox : public Dialog::Controller {
|
||||||
|
public:
|
||||||
|
///
|
||||||
|
ControlBox(Dialog &);
|
||||||
|
///
|
||||||
|
virtual bool initialiseParams(std::string const & data);
|
||||||
|
///
|
||||||
|
virtual void clearParams();
|
||||||
|
///
|
||||||
|
virtual void dispatchParams();
|
||||||
|
///
|
||||||
|
virtual bool isBufferDependent() const { return true; }
|
||||||
|
///
|
||||||
|
InsetBoxParams & params() { return *params_.get(); }
|
||||||
|
///
|
||||||
|
InsetBoxParams const & params() const { return *params_.get(); }
|
||||||
|
///
|
||||||
|
private:
|
||||||
|
///
|
||||||
|
boost::scoped_ptr<InsetBoxParams> params_;
|
||||||
|
};
|
||||||
|
|
||||||
|
///
|
||||||
|
void box_gui_tokens(std::vector<std::string> &, std::vector<std::string> &);
|
||||||
|
///
|
||||||
|
void box_gui_tokens_special_length(std::vector<std::string> &,
|
||||||
|
std::vector<std::string> &);
|
||||||
|
|
||||||
|
#endif // CONTROLBOX_H
|
@ -31,6 +31,8 @@ libcontrollers_la_SOURCES= \
|
|||||||
ControlBibtex.h \
|
ControlBibtex.h \
|
||||||
ControlButtons.C \
|
ControlButtons.C \
|
||||||
ControlButtons.h \
|
ControlButtons.h \
|
||||||
|
ControlBox.C \
|
||||||
|
ControlBox.h \
|
||||||
ControlBranch.C \
|
ControlBranch.C \
|
||||||
ControlBranch.h \
|
ControlBranch.h \
|
||||||
ControlCharacter.C \
|
ControlCharacter.C \
|
||||||
|
@ -1,3 +1,13 @@
|
|||||||
|
2003-10-07 Martin Vermeer <martin.vermeer@hut.fi>
|
||||||
|
|
||||||
|
* Dialogs.C:
|
||||||
|
* FormBox.C:
|
||||||
|
* FormBox.h:
|
||||||
|
* Makefile.am:
|
||||||
|
* forms/Makefile.am:
|
||||||
|
* forms/form_box.fd: The Box patch. Fancybox support, minipage,
|
||||||
|
parbox
|
||||||
|
|
||||||
2003-10-01 Angus Leeming <leeming@lyx.org>
|
2003-10-01 Angus Leeming <leeming@lyx.org>
|
||||||
|
|
||||||
* FormExternal.C (updateComboChange): changes due to the
|
* FormExternal.C (updateComboChange): changes due to the
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
#include "ControlAboutlyx.h"
|
#include "ControlAboutlyx.h"
|
||||||
#include "ControlBibtex.h"
|
#include "ControlBibtex.h"
|
||||||
|
#include "ControlBox.h"
|
||||||
#include "ControlBranch.h"
|
#include "ControlBranch.h"
|
||||||
#include "ControlChanges.h"
|
#include "ControlChanges.h"
|
||||||
#include "ControlCitation.h"
|
#include "ControlCitation.h"
|
||||||
@ -41,6 +42,7 @@
|
|||||||
#include "FormAboutlyx.h"
|
#include "FormAboutlyx.h"
|
||||||
#include "FormBibitem.h"
|
#include "FormBibitem.h"
|
||||||
#include "FormBibtex.h"
|
#include "FormBibtex.h"
|
||||||
|
#include "FormBox.h"
|
||||||
#include "FormBranch.h"
|
#include "FormBranch.h"
|
||||||
#include "FormChanges.h"
|
#include "FormChanges.h"
|
||||||
#include "FormCharacter.h"
|
#include "FormCharacter.h"
|
||||||
@ -109,7 +111,8 @@ FormMathsBitmap * createFormBitmap(Dialog & parent, string const & title,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
char const * const dialognames[] = { "aboutlyx", "bibitem", "bibtex", "branch", "changes",
|
char const * const dialognames[] = {
|
||||||
|
"aboutlyx", "bibitem", "bibtex", "branch", "box", "changes",
|
||||||
"character", "citation", "error", "errorlist" , "ert", "external", "file",
|
"character", "citation", "error", "errorlist" , "ert", "external", "file",
|
||||||
"float", "graphics", "include", "index", "label", "latexlog", "mathpanel",
|
"float", "graphics", "include", "index", "label", "latexlog", "mathpanel",
|
||||||
"mathaccents", "matharrows", "mathoperators", "mathrelations", "mathgreek",
|
"mathaccents", "matharrows", "mathoperators", "mathrelations", "mathgreek",
|
||||||
@ -410,6 +413,10 @@ Dialog * Dialogs::build(string const & name)
|
|||||||
dialog->setController(new ControlNote(*dialog));
|
dialog->setController(new ControlNote(*dialog));
|
||||||
dialog->setView(new FormNote(*dialog));
|
dialog->setView(new FormNote(*dialog));
|
||||||
dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
|
dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
|
||||||
|
} else if (name == "box") {
|
||||||
|
dialog->setController(new ControlBox(*dialog));
|
||||||
|
dialog->setView(new FormBox(*dialog));
|
||||||
|
dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
|
||||||
} else if (name == "branch") {
|
} else if (name == "branch") {
|
||||||
dialog->setController(new ControlBranch(*dialog));
|
dialog->setController(new ControlBranch(*dialog));
|
||||||
dialog->setView(new FormBranch(*dialog));
|
dialog->setView(new FormBranch(*dialog));
|
||||||
|
288
src/frontends/xforms/FormBox.C
Normal file
288
src/frontends/xforms/FormBox.C
Normal file
@ -0,0 +1,288 @@
|
|||||||
|
/**
|
||||||
|
* \file FormBox.C
|
||||||
|
* This file is part of LyX, the document processor.
|
||||||
|
* Licence details can be found in the file COPYING.
|
||||||
|
*
|
||||||
|
* \author Jürgen Vigna (Minipage stuff)
|
||||||
|
* \author Martin Vermeer
|
||||||
|
*
|
||||||
|
* Full author contact details are available in file CREDITS.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
|
#include "FormBox.h"
|
||||||
|
#include "ControlBox.h"
|
||||||
|
#include "forms/form_box.h"
|
||||||
|
#include "controllers/ButtonPolicies.h"
|
||||||
|
#include "controllers/helper_funcs.h"
|
||||||
|
#include "support/lstrings.h"
|
||||||
|
#include "support/tostr.h"
|
||||||
|
|
||||||
|
#include "Tooltips.h"
|
||||||
|
#include "xforms_helpers.h"
|
||||||
|
#include "xformsBC.h"
|
||||||
|
|
||||||
|
#include "insets/insetbox.h"
|
||||||
|
|
||||||
|
#include "lyx_forms.h"
|
||||||
|
#include "debug.h"
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
using lyx::support::getStringFromVector;
|
||||||
|
using lyx::support::isStrDbl;
|
||||||
|
using lyx::support::subst;
|
||||||
|
using std::string;
|
||||||
|
|
||||||
|
|
||||||
|
typedef FormController<ControlBox, FormView<FD_box> > base_class;
|
||||||
|
|
||||||
|
FormBox::FormBox(Dialog & parent)
|
||||||
|
: base_class(parent, _("Box"))
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
void FormBox::build()
|
||||||
|
{
|
||||||
|
dialog_.reset(build_box(this));
|
||||||
|
|
||||||
|
box_gui_tokens(ids_, gui_names_);
|
||||||
|
|
||||||
|
for (unsigned int i = 0; i < gui_names_.size(); ++i) {
|
||||||
|
fl_addto_choice(dialog_->choice_type, gui_names_[i].c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
string str = _("Frameless: No border\n"
|
||||||
|
"Boxed: Rectangular\n"
|
||||||
|
"ovalbox: Oval, thin border\n"
|
||||||
|
"Ovalbox: Oval, thick border\n"
|
||||||
|
"Shadowbox: Box casting shadow\n"
|
||||||
|
"Doublebox: Double line border");
|
||||||
|
tooltips().init(dialog_->choice_type, str);
|
||||||
|
|
||||||
|
bcview().addReadOnly(dialog_->check_inner_box);
|
||||||
|
|
||||||
|
str = _("The inner box may be a parbox or a minipage,\n"
|
||||||
|
"with appropriate arguments from this dialog.");
|
||||||
|
tooltips().init(dialog_->check_inner_box, str);
|
||||||
|
|
||||||
|
bcview().addReadOnly(dialog_->radio_parbox);
|
||||||
|
bcview().addReadOnly(dialog_->radio_minipage);
|
||||||
|
|
||||||
|
bcview().addReadOnly(dialog_->choice_pos);
|
||||||
|
fl_addto_choice(dialog_->choice_pos, _("top").c_str());
|
||||||
|
fl_addto_choice(dialog_->choice_pos, _("middle").c_str());
|
||||||
|
fl_addto_choice(dialog_->choice_pos, _("bottom").c_str());
|
||||||
|
|
||||||
|
bcview().addReadOnly(dialog_->choice_inner_pos);
|
||||||
|
fl_addto_choice(dialog_->choice_inner_pos, _("top").c_str());
|
||||||
|
fl_addto_choice(dialog_->choice_inner_pos, _("middle").c_str());
|
||||||
|
fl_addto_choice(dialog_->choice_inner_pos, _("bottom").c_str());
|
||||||
|
fl_addto_choice(dialog_->choice_inner_pos, _("stretch").c_str());
|
||||||
|
|
||||||
|
bcview().addReadOnly(dialog_->choice_hor_pos);
|
||||||
|
fl_addto_choice(dialog_->choice_hor_pos, _("left").c_str());
|
||||||
|
fl_addto_choice(dialog_->choice_hor_pos, _("center").c_str());
|
||||||
|
fl_addto_choice(dialog_->choice_hor_pos, _("right").c_str());
|
||||||
|
fl_addto_choice(dialog_->choice_hor_pos, _("stretch").c_str());
|
||||||
|
|
||||||
|
bcview().addReadOnly(dialog_->input_width);
|
||||||
|
bcview().addReadOnly(dialog_->choice_width_unit);
|
||||||
|
bcview().addReadOnly(dialog_->choice_special);
|
||||||
|
|
||||||
|
box_gui_tokens_special_length(ids_spec_, gui_names_spec_);
|
||||||
|
for (unsigned int i = 0; i < gui_names_spec_.size(); ++i) {
|
||||||
|
fl_addto_choice(dialog_->choice_special, gui_names_spec_[i].c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
string choice = getStringFromVector(getLatexUnits(), "|");
|
||||||
|
fl_addto_choice(dialog_->choice_width_unit,
|
||||||
|
subst(choice, "%", "%%").c_str());
|
||||||
|
|
||||||
|
bcview().addReadOnly(dialog_->input_height);
|
||||||
|
bcview().addReadOnly(dialog_->choice_height_unit);
|
||||||
|
bcview().addReadOnly(dialog_->choice_height_special);
|
||||||
|
for (unsigned int i = 0; i < gui_names_spec_.size(); ++i) {
|
||||||
|
fl_addto_choice(dialog_->choice_height_special,
|
||||||
|
gui_names_spec_[i].c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
choice = getStringFromVector(getLatexUnits(), "|");
|
||||||
|
fl_addto_choice(dialog_->choice_height_unit,
|
||||||
|
subst(choice, "%", "%%").c_str());
|
||||||
|
|
||||||
|
bcview().setOK(dialog_->button_ok);
|
||||||
|
bcview().setApply(dialog_->button_apply);
|
||||||
|
bcview().setCancel(dialog_->button_cancel);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void FormBox::update()
|
||||||
|
{
|
||||||
|
string type(controller().params().type);
|
||||||
|
for (unsigned int i = 0; i < gui_names_.size(); ++i) {
|
||||||
|
if (type == ids_[i])
|
||||||
|
fl_set_choice_text(dialog_->choice_type, gui_names_[i].c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
fl_set_button(dialog_->check_inner_box, controller().params().inner_box);
|
||||||
|
if (controller().params().type == "Frameless")
|
||||||
|
setEnabled(dialog_->check_inner_box, false);
|
||||||
|
|
||||||
|
char c = controller().params().pos;
|
||||||
|
fl_set_choice(dialog_->choice_pos, string("tcb").find(c, 0) + 1);
|
||||||
|
c = controller().params().inner_pos;
|
||||||
|
fl_set_choice(dialog_->choice_inner_pos, string("tcbs").find(c, 0) + 1);
|
||||||
|
c = controller().params().hor_pos;
|
||||||
|
fl_set_choice(dialog_->choice_hor_pos, string("lcrs").find(c, 0) + 1);
|
||||||
|
setEnabled(dialog_->choice_pos, controller().params().inner_box);
|
||||||
|
setEnabled(dialog_->choice_inner_pos, controller().params().inner_box);
|
||||||
|
setEnabled(dialog_->choice_hor_pos, !controller().params().inner_box);
|
||||||
|
|
||||||
|
fl_set_button(dialog_->radio_parbox, controller().params().use_parbox);
|
||||||
|
fl_set_button(dialog_->radio_minipage, !controller().params().use_parbox);
|
||||||
|
setEnabled(dialog_->radio_parbox, controller().params().inner_box);
|
||||||
|
setEnabled(dialog_->radio_minipage, controller().params().inner_box);
|
||||||
|
|
||||||
|
LyXLength len(controller().params().width);
|
||||||
|
fl_set_input(dialog_->input_width, tostr(len.value()).c_str());
|
||||||
|
fl_set_choice(dialog_->choice_width_unit, len.unit() + 1);
|
||||||
|
string special(controller().params().special);
|
||||||
|
for (unsigned int i = 0; i < gui_names_spec_.size(); ++i) {
|
||||||
|
if (special == ids_spec_[i])
|
||||||
|
fl_set_choice_text(dialog_->choice_special,
|
||||||
|
gui_names_spec_[i].c_str());
|
||||||
|
}
|
||||||
|
// Special width unit must be default for general units to be enabled
|
||||||
|
if(controller().params().special != "none")
|
||||||
|
setEnabled(dialog_->choice_width_unit, false);
|
||||||
|
setEnabled(dialog_->choice_special, !controller().params().inner_box);
|
||||||
|
|
||||||
|
LyXLength ht(controller().params().height);
|
||||||
|
fl_set_input(dialog_->input_height, tostr(ht.value()).c_str());
|
||||||
|
fl_set_choice(dialog_->choice_height_unit, ht.unit() + 1);
|
||||||
|
string const height_special(controller().params().height_special);
|
||||||
|
for (unsigned int i = 0; i < gui_names_spec_.size(); ++i) {
|
||||||
|
if (height_special == ids_spec_[i])
|
||||||
|
fl_set_choice_text(dialog_->choice_height_special,
|
||||||
|
gui_names_spec_[i].c_str());
|
||||||
|
}
|
||||||
|
setEnabled(dialog_->input_height, controller().params().inner_box);
|
||||||
|
setEnabled(dialog_->choice_height_unit, controller().params().inner_box);
|
||||||
|
setEnabled(dialog_->choice_height_special, controller().params().inner_box);
|
||||||
|
// Same here
|
||||||
|
if(height_special != "none")
|
||||||
|
setEnabled(dialog_->choice_height_unit, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void FormBox::apply()
|
||||||
|
{
|
||||||
|
int i = fl_get_choice(dialog_->choice_type);
|
||||||
|
controller().params().type = ids_[i - 1];
|
||||||
|
|
||||||
|
controller().params().inner_box = fl_get_button(dialog_->check_inner_box);
|
||||||
|
controller().params().use_parbox =
|
||||||
|
fl_get_button(dialog_->radio_parbox);
|
||||||
|
controller().params().width =
|
||||||
|
LyXLength(getLengthFromWidgets(dialog_->input_width,
|
||||||
|
dialog_->choice_width_unit));
|
||||||
|
|
||||||
|
controller().params().pos =
|
||||||
|
"tcb"[fl_get_choice(dialog_->choice_pos) - 1];
|
||||||
|
controller().params().inner_pos =
|
||||||
|
"tcbs"[fl_get_choice(dialog_->choice_inner_pos) - 1];
|
||||||
|
controller().params().hor_pos =
|
||||||
|
"lcrs"[fl_get_choice(dialog_->choice_hor_pos) - 1];
|
||||||
|
|
||||||
|
i = fl_get_choice(dialog_->choice_special);
|
||||||
|
controller().params().special = ids_spec_[i - 1];
|
||||||
|
|
||||||
|
controller().params().height =
|
||||||
|
LyXLength(getLengthFromWidgets(dialog_->input_height,
|
||||||
|
dialog_->choice_height_unit));
|
||||||
|
i = fl_get_choice(dialog_->choice_height_special);
|
||||||
|
controller().params().height_special = ids_spec_[i - 1];
|
||||||
|
}
|
||||||
|
|
||||||
|
ButtonPolicy::SMInput FormBox::input(FL_OBJECT * ob, long)
|
||||||
|
{
|
||||||
|
if (ob == dialog_->check_inner_box) {
|
||||||
|
setEnabled(dialog_->choice_pos,
|
||||||
|
fl_get_button(dialog_->check_inner_box));
|
||||||
|
setEnabled(dialog_->radio_parbox,
|
||||||
|
fl_get_button(dialog_->check_inner_box));
|
||||||
|
setEnabled(dialog_->radio_minipage,
|
||||||
|
fl_get_button(dialog_->check_inner_box));
|
||||||
|
setEnabled(dialog_->choice_width_unit, true);
|
||||||
|
setEnabled(dialog_->choice_special,
|
||||||
|
!fl_get_button(dialog_->check_inner_box));
|
||||||
|
setEnabled(dialog_->input_height,
|
||||||
|
fl_get_button(dialog_->check_inner_box));
|
||||||
|
setEnabled(dialog_->choice_height_unit,
|
||||||
|
fl_get_button(dialog_->check_inner_box));
|
||||||
|
setEnabled(dialog_->choice_height_special,
|
||||||
|
fl_get_button(dialog_->check_inner_box));
|
||||||
|
setEnabled(dialog_->choice_hor_pos,
|
||||||
|
!fl_get_button(dialog_->check_inner_box));
|
||||||
|
setEnabled(dialog_->choice_inner_pos,
|
||||||
|
fl_get_button(dialog_->check_inner_box));
|
||||||
|
|
||||||
|
// Reset to defaults to not confuse users:
|
||||||
|
if (fl_get_button(dialog_->check_inner_box))
|
||||||
|
fl_set_choice(dialog_->choice_special, NONE);
|
||||||
|
else
|
||||||
|
fl_set_choice(dialog_->choice_height_special, NONE);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ob == dialog_->choice_special || ob == dialog_->check_inner_box)
|
||||||
|
setEnabled(dialog_->choice_width_unit,
|
||||||
|
fl_get_choice(dialog_->choice_special) == NONE);
|
||||||
|
if (ob == dialog_->choice_height_special || ob == dialog_->check_inner_box)
|
||||||
|
if (fl_get_choice(dialog_->choice_height_special) != NONE)
|
||||||
|
setEnabled(dialog_->choice_height_unit, false);
|
||||||
|
else
|
||||||
|
setEnabled(dialog_->choice_height_unit,
|
||||||
|
fl_get_button(dialog_->check_inner_box));
|
||||||
|
|
||||||
|
// An inner box (parbox, minipage) is mandatory if no outer box
|
||||||
|
if (ob == dialog_->choice_type) {
|
||||||
|
int i = fl_get_choice(dialog_->choice_type);
|
||||||
|
if (ids_[i - 1] == "Frameless") {
|
||||||
|
setEnabled(dialog_->check_inner_box, false);
|
||||||
|
fl_set_button(dialog_->check_inner_box, true);
|
||||||
|
} else {
|
||||||
|
setEnabled(dialog_->check_inner_box, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// disallow senseless data, warnings if input is senseless
|
||||||
|
if (ob == dialog_->input_width) {
|
||||||
|
string const input = getString(dialog_->input_width);
|
||||||
|
bool const invalid = !isValidLength(input) && !isStrDbl(input);
|
||||||
|
if (invalid) {
|
||||||
|
postWarning(_("Invalid Length!"));
|
||||||
|
return ButtonPolicy::SMI_INVALID;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (ob == dialog_->input_height) {
|
||||||
|
string const input = getString(dialog_->input_height);
|
||||||
|
bool const invalid = !isValidLength(input) && !isStrDbl(input);
|
||||||
|
if (invalid) {
|
||||||
|
postWarning(_("Invalid Length!"));
|
||||||
|
return ButtonPolicy::SMI_INVALID;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (ob == dialog_->button_defaults) {
|
||||||
|
fl_set_button(dialog_->check_inner_box, true);
|
||||||
|
fl_set_button(dialog_->radio_parbox, false);
|
||||||
|
fl_set_input(dialog_->input_width, "100");
|
||||||
|
fl_set_choice(dialog_->choice_width_unit, LyXLength::PCW + 1);
|
||||||
|
fl_set_choice(dialog_->choice_special, NONE);
|
||||||
|
fl_set_input(dialog_->input_height, "1");
|
||||||
|
fl_set_choice(dialog_->choice_height_special, TOTALHEIGHT);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ButtonPolicy::SMI_VALID;
|
||||||
|
}
|
||||||
|
|
55
src/frontends/xforms/FormBox.h
Normal file
55
src/frontends/xforms/FormBox.h
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
// -*- C++ -*-
|
||||||
|
/**
|
||||||
|
* \file FormBox.h
|
||||||
|
* This file is part of LyX, the document processor.
|
||||||
|
* Licence details can be found in the file COPYING.
|
||||||
|
*
|
||||||
|
* \author Martin Vermeer
|
||||||
|
*
|
||||||
|
* Full author contact details are available in file CREDITS.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef FORMBOX_H
|
||||||
|
#define FORMBOX_H
|
||||||
|
|
||||||
|
|
||||||
|
#include "FormDialogView.h"
|
||||||
|
|
||||||
|
|
||||||
|
class ControlBox;
|
||||||
|
struct FD_box;
|
||||||
|
|
||||||
|
/** This class provides an XForms implementation of the Box Dialog.
|
||||||
|
*/
|
||||||
|
class FormBox : public FormController<ControlBox, FormView<FD_box> > {
|
||||||
|
public:
|
||||||
|
/// Constructor
|
||||||
|
FormBox(Dialog &);
|
||||||
|
private:
|
||||||
|
///
|
||||||
|
virtual void apply();
|
||||||
|
/// Build the dialog
|
||||||
|
virtual void build();
|
||||||
|
/// Update dialog before showing it
|
||||||
|
virtual void update();
|
||||||
|
///
|
||||||
|
virtual ButtonPolicy::SMInput input( FL_OBJECT *, long);
|
||||||
|
///
|
||||||
|
std::vector<std::string> ids_;
|
||||||
|
///
|
||||||
|
std::vector<std::string> gui_names_;
|
||||||
|
///
|
||||||
|
std::vector<std::string> ids_spec_;
|
||||||
|
///
|
||||||
|
std::vector<std::string> gui_names_spec_;
|
||||||
|
///
|
||||||
|
enum Specials {
|
||||||
|
NONE = 1,
|
||||||
|
HEIGHT,
|
||||||
|
DEPTH,
|
||||||
|
TOTALHEIGHT,
|
||||||
|
WIDTH
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // FORMBOX_H
|
@ -72,6 +72,8 @@ libxforms_la_SOURCES = \
|
|||||||
FormBibitem.h \
|
FormBibitem.h \
|
||||||
FormBibtex.C \
|
FormBibtex.C \
|
||||||
FormBibtex.h \
|
FormBibtex.h \
|
||||||
|
FormBox.C \
|
||||||
|
FormBox.h \
|
||||||
FormBrowser.C \
|
FormBrowser.C \
|
||||||
FormBrowser.h \
|
FormBrowser.h \
|
||||||
FormBranch.C \
|
FormBranch.C \
|
||||||
|
@ -12,6 +12,7 @@ noinst_LTLIBRARIES = libfdesign.la
|
|||||||
SRCS = form_aboutlyx.fd \
|
SRCS = form_aboutlyx.fd \
|
||||||
form_bibitem.fd \
|
form_bibitem.fd \
|
||||||
form_bibtex.fd \
|
form_bibtex.fd \
|
||||||
|
form_box.fd \
|
||||||
form_browser.fd \
|
form_browser.fd \
|
||||||
form_branch.fd \
|
form_branch.fd \
|
||||||
form_changes.fd \
|
form_changes.fd \
|
||||||
|
359
src/frontends/xforms/forms/form_box.fd
Normal file
359
src/frontends/xforms/forms/form_box.fd
Normal file
@ -0,0 +1,359 @@
|
|||||||
|
Magic: 13000
|
||||||
|
|
||||||
|
Internal Form Definition File
|
||||||
|
(do not change)
|
||||||
|
|
||||||
|
Number of forms: 1
|
||||||
|
Unit of measure: FL_COORD_PIXEL
|
||||||
|
SnapGrid: 7
|
||||||
|
|
||||||
|
=============== FORM ===============
|
||||||
|
Name: form_box
|
||||||
|
Width: 442
|
||||||
|
Height: 379
|
||||||
|
Number of Objects: 19
|
||||||
|
|
||||||
|
--------------------
|
||||||
|
class: FL_BOX
|
||||||
|
type: UP_BOX
|
||||||
|
box: 0 0 442 379
|
||||||
|
boxtype: FL_UP_BOX
|
||||||
|
colors: FL_COL1 FL_COL1
|
||||||
|
alignment: FL_ALIGN_CENTER
|
||||||
|
style: FL_NORMAL_STYLE
|
||||||
|
size: FL_DEFAULT_SIZE
|
||||||
|
lcol: FL_BLACK
|
||||||
|
label:
|
||||||
|
shortcut:
|
||||||
|
resize: FL_RESIZE_ALL
|
||||||
|
gravity: FL_NoGravity FL_NoGravity
|
||||||
|
name:
|
||||||
|
callback:
|
||||||
|
argument:
|
||||||
|
|
||||||
|
--------------------
|
||||||
|
class: FL_CHOICE
|
||||||
|
type: NORMAL_CHOICE
|
||||||
|
box: 175 21 231 28
|
||||||
|
boxtype: FL_FRAME_BOX
|
||||||
|
colors: FL_COL1 FL_BLACK
|
||||||
|
alignment: FL_ALIGN_LEFT
|
||||||
|
style: FL_NORMAL_STYLE
|
||||||
|
size: FL_NORMAL_SIZE
|
||||||
|
lcol: FL_BLACK
|
||||||
|
label: Box Type|#T
|
||||||
|
shortcut:
|
||||||
|
resize: FL_RESIZE_ALL
|
||||||
|
gravity: FL_NoGravity FL_NoGravity
|
||||||
|
name: choice_type
|
||||||
|
callback: C_FormDialogView_InputCB
|
||||||
|
argument: 0
|
||||||
|
|
||||||
|
--------------------
|
||||||
|
class: FL_BUTTON
|
||||||
|
type: RETURN_BUTTON
|
||||||
|
box: 56 322 84 28
|
||||||
|
boxtype: FL_UP_BOX
|
||||||
|
colors: FL_COL1 FL_COL1
|
||||||
|
alignment: FL_ALIGN_CENTER
|
||||||
|
style: FL_NORMAL_STYLE
|
||||||
|
size: FL_NORMAL_SIZE
|
||||||
|
lcol: FL_BLACK
|
||||||
|
label: OK
|
||||||
|
shortcut: ^M
|
||||||
|
resize: FL_RESIZE_ALL
|
||||||
|
gravity: FL_NoGravity FL_NoGravity
|
||||||
|
name: button_ok
|
||||||
|
callback: C_FormDialogView_OKCB
|
||||||
|
argument: 0
|
||||||
|
|
||||||
|
--------------------
|
||||||
|
class: FL_BUTTON
|
||||||
|
type: RETURN_BUTTON
|
||||||
|
box: 147 322 98 28
|
||||||
|
boxtype: FL_UP_BOX
|
||||||
|
colors: FL_COL1 FL_COL1
|
||||||
|
alignment: FL_ALIGN_CENTER
|
||||||
|
style: FL_NORMAL_STYLE
|
||||||
|
size: FL_NORMAL_SIZE
|
||||||
|
lcol: FL_BLACK
|
||||||
|
label: Apply|#A
|
||||||
|
shortcut: ^M
|
||||||
|
resize: FL_RESIZE_ALL
|
||||||
|
gravity: FL_NoGravity FL_NoGravity
|
||||||
|
name: button_apply
|
||||||
|
callback: C_FormDialogView_ApplyCB
|
||||||
|
argument: 0
|
||||||
|
|
||||||
|
--------------------
|
||||||
|
class: FL_BUTTON
|
||||||
|
type: RETURN_BUTTON
|
||||||
|
box: 252 322 105 28
|
||||||
|
boxtype: FL_UP_BOX
|
||||||
|
colors: FL_COL1 FL_COL1
|
||||||
|
alignment: FL_ALIGN_CENTER
|
||||||
|
style: FL_NORMAL_STYLE
|
||||||
|
size: FL_NORMAL_SIZE
|
||||||
|
lcol: FL_BLACK
|
||||||
|
label: Cancel|^[
|
||||||
|
shortcut: ^M
|
||||||
|
resize: FL_RESIZE_ALL
|
||||||
|
gravity: FL_NoGravity FL_NoGravity
|
||||||
|
name: button_cancel
|
||||||
|
callback: C_FormDialogView_CancelCB
|
||||||
|
argument: 0
|
||||||
|
|
||||||
|
--------------------
|
||||||
|
class: FL_CHECKBUTTON
|
||||||
|
type: PUSH_BUTTON
|
||||||
|
box: 21 70 35 28
|
||||||
|
boxtype: FL_NO_BOX
|
||||||
|
colors: FL_COL1 FL_YELLOW
|
||||||
|
alignment: FL_ALIGN_CENTER
|
||||||
|
style: FL_NORMAL_STYLE
|
||||||
|
size: FL_NORMAL_SIZE
|
||||||
|
lcol: FL_BLACK
|
||||||
|
label: Has Inner Box
|
||||||
|
shortcut:
|
||||||
|
resize: FL_RESIZE_ALL
|
||||||
|
gravity: FL_NoGravity FL_NoGravity
|
||||||
|
name: check_inner_box
|
||||||
|
callback: C_FormDialogView_InputCB
|
||||||
|
argument: 0
|
||||||
|
|
||||||
|
--------------------
|
||||||
|
class: FL_CHOICE
|
||||||
|
type: NORMAL_CHOICE2
|
||||||
|
box: 315 77 91 28
|
||||||
|
boxtype: FL_UP_BOX
|
||||||
|
colors: FL_COL1 FL_BLACK
|
||||||
|
alignment: FL_ALIGN_LEFT
|
||||||
|
style: FL_NORMAL_STYLE
|
||||||
|
size: FL_NORMAL_SIZE
|
||||||
|
lcol: FL_BLACK
|
||||||
|
label: Vertical Position
|
||||||
|
shortcut:
|
||||||
|
resize: FL_RESIZE_ALL
|
||||||
|
gravity: FL_NoGravity FL_NoGravity
|
||||||
|
name: choice_pos
|
||||||
|
callback: C_FormDialogView_InputCB
|
||||||
|
argument: 0
|
||||||
|
|
||||||
|
--------------------
|
||||||
|
class: FL_CHOICE
|
||||||
|
type: NORMAL_CHOICE2
|
||||||
|
box: 203 210 91 28
|
||||||
|
boxtype: FL_UP_BOX
|
||||||
|
colors: FL_COL1 FL_BLACK
|
||||||
|
alignment: FL_ALIGN_TOP
|
||||||
|
style: FL_NORMAL_STYLE
|
||||||
|
size: FL_NORMAL_SIZE
|
||||||
|
lcol: FL_BLACK
|
||||||
|
label: Width Unit
|
||||||
|
shortcut:
|
||||||
|
resize: FL_RESIZE_ALL
|
||||||
|
gravity: FL_NoGravity FL_NoGravity
|
||||||
|
name: choice_width_unit
|
||||||
|
callback: C_FormDialogView_InputCB
|
||||||
|
argument: 0
|
||||||
|
|
||||||
|
--------------------
|
||||||
|
class: FL_INPUT
|
||||||
|
type: NORMAL_INPUT
|
||||||
|
box: 126 210 77 28
|
||||||
|
boxtype: FL_DOWN_BOX
|
||||||
|
colors: FL_COL1 FL_MCOL
|
||||||
|
alignment: FL_ALIGN_TOP
|
||||||
|
style: FL_NORMAL_STYLE
|
||||||
|
size: FL_NORMAL_SIZE
|
||||||
|
lcol: FL_BLACK
|
||||||
|
label: Width
|
||||||
|
shortcut:
|
||||||
|
resize: FL_RESIZE_ALL
|
||||||
|
gravity: FL_NoGravity FL_NoGravity
|
||||||
|
name: input_width
|
||||||
|
callback: C_FormDialogView_InputCB
|
||||||
|
argument: 0
|
||||||
|
|
||||||
|
--------------------
|
||||||
|
class: FL_CHOICE
|
||||||
|
type: NORMAL_CHOICE2
|
||||||
|
box: 294 210 112 28
|
||||||
|
boxtype: FL_UP_BOX
|
||||||
|
colors: FL_COL1 FL_BLACK
|
||||||
|
alignment: FL_ALIGN_TOP
|
||||||
|
style: FL_NORMAL_STYLE
|
||||||
|
size: FL_NORMAL_SIZE
|
||||||
|
lcol: FL_BLACK
|
||||||
|
label: Special
|
||||||
|
shortcut:
|
||||||
|
resize: FL_RESIZE_ALL
|
||||||
|
gravity: FL_NoGravity FL_NoGravity
|
||||||
|
name: choice_special
|
||||||
|
callback: C_FormDialogView_InputCB
|
||||||
|
argument: 0
|
||||||
|
|
||||||
|
--------------------
|
||||||
|
class: FL_ROUND3DBUTTON
|
||||||
|
type: RADIO_BUTTON
|
||||||
|
box: 21 112 35 28
|
||||||
|
boxtype: FL_NO_BOX
|
||||||
|
colors: FL_COL1 FL_YELLOW
|
||||||
|
alignment: FL_ALIGN_CENTER
|
||||||
|
style: FL_NORMAL_STYLE
|
||||||
|
size: FL_NORMAL_SIZE
|
||||||
|
lcol: FL_BLACK
|
||||||
|
label: Parbox
|
||||||
|
shortcut:
|
||||||
|
resize: FL_RESIZE_ALL
|
||||||
|
gravity: FL_NoGravity FL_NoGravity
|
||||||
|
name: radio_parbox
|
||||||
|
callback: C_FormDialogView_InputCB
|
||||||
|
argument: 0
|
||||||
|
|
||||||
|
--------------------
|
||||||
|
class: FL_ROUND3DBUTTON
|
||||||
|
type: RADIO_BUTTON
|
||||||
|
box: 21 140 35 28
|
||||||
|
boxtype: FL_NO_BOX
|
||||||
|
colors: FL_COL1 FL_YELLOW
|
||||||
|
alignment: FL_ALIGN_CENTER
|
||||||
|
style: FL_NORMAL_STYLE
|
||||||
|
size: FL_NORMAL_SIZE
|
||||||
|
lcol: FL_BLACK
|
||||||
|
label: Minipage
|
||||||
|
shortcut:
|
||||||
|
resize: FL_RESIZE_ALL
|
||||||
|
gravity: FL_NoGravity FL_NoGravity
|
||||||
|
name: radio_minipage
|
||||||
|
callback: C_FormDialogView_InputCB
|
||||||
|
argument: 0
|
||||||
|
|
||||||
|
--------------------
|
||||||
|
class: FL_FRAME
|
||||||
|
type: ENGRAVED_FRAME
|
||||||
|
box: 14 112 112 63
|
||||||
|
boxtype: FL_NO_BOX
|
||||||
|
colors: FL_BLACK FL_COL1
|
||||||
|
alignment: FL_ALIGN_CENTER
|
||||||
|
style: FL_NORMAL_STYLE
|
||||||
|
size: FL_DEFAULT_SIZE
|
||||||
|
lcol: FL_BLACK
|
||||||
|
label:
|
||||||
|
shortcut:
|
||||||
|
resize: FL_RESIZE_ALL
|
||||||
|
gravity: FL_NoGravity FL_NoGravity
|
||||||
|
name:
|
||||||
|
callback:
|
||||||
|
argument:
|
||||||
|
|
||||||
|
--------------------
|
||||||
|
class: FL_CHOICE
|
||||||
|
type: NORMAL_CHOICE2
|
||||||
|
box: 315 112 91 28
|
||||||
|
boxtype: FL_UP_BOX
|
||||||
|
colors: FL_COL1 FL_BLACK
|
||||||
|
alignment: FL_ALIGN_LEFT
|
||||||
|
style: FL_NORMAL_STYLE
|
||||||
|
size: FL_NORMAL_SIZE
|
||||||
|
lcol: FL_BLACK
|
||||||
|
label: Inner Position (Vert.)
|
||||||
|
shortcut:
|
||||||
|
resize: FL_RESIZE_ALL
|
||||||
|
gravity: FL_NoGravity FL_NoGravity
|
||||||
|
name: choice_inner_pos
|
||||||
|
callback: C_FormDialogView_InputCB
|
||||||
|
argument: 0
|
||||||
|
|
||||||
|
--------------------
|
||||||
|
class: FL_CHOICE
|
||||||
|
type: NORMAL_CHOICE2
|
||||||
|
box: 315 147 91 28
|
||||||
|
boxtype: FL_UP_BOX
|
||||||
|
colors: FL_COL1 FL_BLACK
|
||||||
|
alignment: FL_ALIGN_LEFT
|
||||||
|
style: FL_NORMAL_STYLE
|
||||||
|
size: FL_NORMAL_SIZE
|
||||||
|
lcol: FL_BLACK
|
||||||
|
label: Horizontal Position
|
||||||
|
shortcut:
|
||||||
|
resize: FL_RESIZE_ALL
|
||||||
|
gravity: FL_NoGravity FL_NoGravity
|
||||||
|
name: choice_hor_pos
|
||||||
|
callback: C_FormDialogView_InputCB
|
||||||
|
argument: 0
|
||||||
|
|
||||||
|
--------------------
|
||||||
|
class: FL_INPUT
|
||||||
|
type: NORMAL_INPUT
|
||||||
|
box: 126 266 77 28
|
||||||
|
boxtype: FL_DOWN_BOX
|
||||||
|
colors: FL_COL1 FL_MCOL
|
||||||
|
alignment: FL_ALIGN_TOP
|
||||||
|
style: FL_NORMAL_STYLE
|
||||||
|
size: FL_NORMAL_SIZE
|
||||||
|
lcol: FL_BLACK
|
||||||
|
label: Height
|
||||||
|
shortcut:
|
||||||
|
resize: FL_RESIZE_ALL
|
||||||
|
gravity: FL_NoGravity FL_NoGravity
|
||||||
|
name: input_height
|
||||||
|
callback: C_FormDialogView_InputCB
|
||||||
|
argument: 0
|
||||||
|
|
||||||
|
--------------------
|
||||||
|
class: FL_CHOICE
|
||||||
|
type: NORMAL_CHOICE2
|
||||||
|
box: 203 266 91 28
|
||||||
|
boxtype: FL_UP_BOX
|
||||||
|
colors: FL_COL1 FL_BLACK
|
||||||
|
alignment: FL_ALIGN_TOP
|
||||||
|
style: FL_NORMAL_STYLE
|
||||||
|
size: FL_NORMAL_SIZE
|
||||||
|
lcol: FL_BLACK
|
||||||
|
label: Height Unit
|
||||||
|
shortcut:
|
||||||
|
resize: FL_RESIZE_ALL
|
||||||
|
gravity: FL_NoGravity FL_NoGravity
|
||||||
|
name: choice_height_unit
|
||||||
|
callback: C_FormDialogView_InputCB
|
||||||
|
argument: 0
|
||||||
|
|
||||||
|
--------------------
|
||||||
|
class: FL_CHOICE
|
||||||
|
type: NORMAL_CHOICE2
|
||||||
|
box: 294 266 112 28
|
||||||
|
boxtype: FL_UP_BOX
|
||||||
|
colors: FL_COL1 FL_BLACK
|
||||||
|
alignment: FL_ALIGN_TOP
|
||||||
|
style: FL_NORMAL_STYLE
|
||||||
|
size: FL_NORMAL_SIZE
|
||||||
|
lcol: FL_BLACK
|
||||||
|
label: Special
|
||||||
|
shortcut:
|
||||||
|
resize: FL_RESIZE_ALL
|
||||||
|
gravity: FL_NoGravity FL_NoGravity
|
||||||
|
name: choice_height_special
|
||||||
|
callback: C_FormDialogView_InputCB
|
||||||
|
argument: 0
|
||||||
|
|
||||||
|
--------------------
|
||||||
|
class: FL_BUTTON
|
||||||
|
type: NORMAL_BUTTON
|
||||||
|
box: 28 238 77 28
|
||||||
|
boxtype: FL_UP_BOX
|
||||||
|
colors: FL_COL1 FL_COL1
|
||||||
|
alignment: FL_ALIGN_CENTER
|
||||||
|
style: FL_NORMAL_STYLE
|
||||||
|
size: FL_DEFAULT_SIZE
|
||||||
|
lcol: FL_BLACK
|
||||||
|
label: Reset
|
||||||
|
shortcut:
|
||||||
|
resize: FL_RESIZE_ALL
|
||||||
|
gravity: FL_NoGravity FL_NoGravity
|
||||||
|
name: button_defaults
|
||||||
|
callback: C_FormDialogView_InputCB
|
||||||
|
argument: 0
|
||||||
|
|
||||||
|
==============================
|
||||||
|
create_the_forms
|
@ -1,3 +1,10 @@
|
|||||||
|
2003-10-07 Martin Vermeer <martin.vermeer@hut.fi>
|
||||||
|
|
||||||
|
* Makefile.am:
|
||||||
|
* inset.h:
|
||||||
|
* insetbox.C:
|
||||||
|
* insetbox.h: The Box patch. Fancybox support, minipage, parbox
|
||||||
|
|
||||||
2003-10-02 André Pönitz <poenitz@gmx.net>
|
2003-10-02 André Pönitz <poenitz@gmx.net>
|
||||||
|
|
||||||
* insettext.C (read): make sure there is at least one par
|
* insettext.C (read): make sure there is at least one par
|
||||||
|
@ -25,6 +25,8 @@ libinsets_la_SOURCES = \
|
|||||||
insetbibitem.h \
|
insetbibitem.h \
|
||||||
insetbibtex.C \
|
insetbibtex.C \
|
||||||
insetbibtex.h \
|
insetbibtex.h \
|
||||||
|
insetbox.C \
|
||||||
|
insetbox.h \
|
||||||
insetbranch.C \
|
insetbranch.C \
|
||||||
insetbranch.h \
|
insetbranch.h \
|
||||||
insetcaption.C \
|
insetcaption.C \
|
||||||
|
@ -131,7 +131,9 @@ public:
|
|||||||
///
|
///
|
||||||
NEWLINE_CODE,
|
NEWLINE_CODE,
|
||||||
///
|
///
|
||||||
BRANCH_CODE
|
BRANCH_CODE,
|
||||||
|
///
|
||||||
|
BOX_CODE
|
||||||
};
|
};
|
||||||
|
|
||||||
///
|
///
|
||||||
|
590
src/insets/insetbox.C
Normal file
590
src/insets/insetbox.C
Normal file
@ -0,0 +1,590 @@
|
|||||||
|
/**
|
||||||
|
* \file insetbox.C
|
||||||
|
* This file is part of LyX, the document processor.
|
||||||
|
* Licence details can be found in the file COPYING.
|
||||||
|
*
|
||||||
|
* \author Angus Leeming
|
||||||
|
* \author Martin Vermeer
|
||||||
|
* \author Jürgen Spitzmüller
|
||||||
|
*
|
||||||
|
* Full author contact details are available in file CREDITS.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
|
#include "insetbox.h"
|
||||||
|
#include "debug.h"
|
||||||
|
|
||||||
|
#include "BufferView.h"
|
||||||
|
#include "funcrequest.h"
|
||||||
|
#include "gettext.h"
|
||||||
|
#include "LaTeXFeatures.h"
|
||||||
|
#include "LColor.h"
|
||||||
|
#include "lyxlex.h"
|
||||||
|
#include "metricsinfo.h"
|
||||||
|
#include "paragraph.h"
|
||||||
|
|
||||||
|
#include "support/std_sstream.h"
|
||||||
|
|
||||||
|
using std::auto_ptr;
|
||||||
|
using std::string;
|
||||||
|
using std::istringstream;
|
||||||
|
using std::ostream;
|
||||||
|
using std::ostringstream;
|
||||||
|
using std::endl;
|
||||||
|
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
|
||||||
|
BoxTranslator const init_boxtranslator() {
|
||||||
|
BoxTranslator translator("Boxed", InsetBox::Boxed);
|
||||||
|
translator.addPair("Frameless", InsetBox::Frameless);
|
||||||
|
translator.addPair("ovalbox", InsetBox::ovalbox);
|
||||||
|
translator.addPair("Ovalbox", InsetBox::Ovalbox);
|
||||||
|
translator.addPair("Shadowbox", InsetBox::Shadowbox);
|
||||||
|
translator.addPair("Doublebox",InsetBox::Doublebox);
|
||||||
|
return translator;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
BoxTranslator const init_boxtranslator_loc() {
|
||||||
|
BoxTranslator translator(_("Boxed"), InsetBox::Boxed);
|
||||||
|
translator.addPair(_("Frameless"), InsetBox::Frameless);
|
||||||
|
translator.addPair(_("ovalbox"), InsetBox::ovalbox);
|
||||||
|
translator.addPair(_("Ovalbox"), InsetBox::Ovalbox);
|
||||||
|
translator.addPair(_("Shadowbox"), InsetBox::Shadowbox);
|
||||||
|
translator.addPair(_("Doublebox"), InsetBox::Doublebox);
|
||||||
|
return translator;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
BoxTranslator const & boxtranslator() {
|
||||||
|
static BoxTranslator translator = init_boxtranslator();
|
||||||
|
return translator;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
BoxTranslator const & boxtranslator_loc() {
|
||||||
|
static BoxTranslator translator = init_boxtranslator_loc();
|
||||||
|
return translator;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // anon
|
||||||
|
|
||||||
|
|
||||||
|
void InsetBox::init()
|
||||||
|
{
|
||||||
|
setInsetName("Box");
|
||||||
|
setButtonLabel();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
InsetBox::InsetBox(BufferParams const & bp, string const & label)
|
||||||
|
: InsetCollapsable(bp), params_(label)
|
||||||
|
{
|
||||||
|
init();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
InsetBox::InsetBox(InsetBox const & in)
|
||||||
|
: InsetCollapsable(in), params_(in.params_)
|
||||||
|
{
|
||||||
|
init();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
InsetBox::~InsetBox()
|
||||||
|
{
|
||||||
|
InsetBoxMailer mailer(*this);
|
||||||
|
mailer.hideDialog();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
auto_ptr<InsetBase> InsetBox::clone() const
|
||||||
|
{
|
||||||
|
return auto_ptr<InsetBase>(new InsetBox(*this));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
string const InsetBox::editMessage() const
|
||||||
|
{
|
||||||
|
return _("Opened Box Inset");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void InsetBox::write(Buffer const & buf, ostream & os) const
|
||||||
|
{
|
||||||
|
params_.write(os);
|
||||||
|
InsetCollapsable::write(buf, os);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void InsetBox::read(Buffer const & buf, LyXLex & lex)
|
||||||
|
{
|
||||||
|
params_.read(lex);
|
||||||
|
InsetCollapsable::read(buf, lex);
|
||||||
|
setButtonLabel();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void InsetBox::setButtonLabel()
|
||||||
|
{
|
||||||
|
LyXFont font(LyXFont::ALL_SANE);
|
||||||
|
font.decSize();
|
||||||
|
font.decSize();
|
||||||
|
|
||||||
|
BoxType btype = boxtranslator().find(params_.type);
|
||||||
|
if (btype == Frameless) {
|
||||||
|
if (params_.use_parbox)
|
||||||
|
setLabel(_("Parbox"));
|
||||||
|
else
|
||||||
|
setLabel(_("Minipage"));
|
||||||
|
} else
|
||||||
|
setLabel(boxtranslator_loc().find(btype));
|
||||||
|
|
||||||
|
font.setColor(LColor::foreground);
|
||||||
|
setBackgroundColor(LColor::background);
|
||||||
|
setLabelFont(font);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void InsetBox::metrics(MetricsInfo & mi, Dimension & dim) const
|
||||||
|
{
|
||||||
|
InsetCollapsable::metrics(mi, dim);
|
||||||
|
if (params_.inner_box && isOpen())
|
||||||
|
dim.wid = mi.base.textwidth;
|
||||||
|
dim_ = dim;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool InsetBox::showInsetDialog(BufferView * bv) const
|
||||||
|
{
|
||||||
|
InsetBoxMailer(const_cast<InsetBox &>(*this)).showDialog(bv);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
dispatch_result InsetBox::localDispatch(FuncRequest const & cmd)
|
||||||
|
{
|
||||||
|
BufferView * bv = cmd.view();
|
||||||
|
|
||||||
|
switch (cmd.action) {
|
||||||
|
|
||||||
|
case LFUN_INSET_MODIFY: {
|
||||||
|
InsetBoxMailer::string2params(cmd.argument, params_);
|
||||||
|
setButtonLabel();
|
||||||
|
bv->updateInset(this);
|
||||||
|
return DISPATCHED;
|
||||||
|
}
|
||||||
|
case LFUN_INSET_DIALOG_UPDATE:
|
||||||
|
InsetBoxMailer(*this).updateDialog(bv);
|
||||||
|
return DISPATCHED;
|
||||||
|
|
||||||
|
case LFUN_MOUSE_RELEASE:
|
||||||
|
if (cmd.button() == mouse_button::button3 && hitButton(cmd)) {
|
||||||
|
InsetBoxMailer(*this).showDialog(bv);
|
||||||
|
return DISPATCHED;
|
||||||
|
}
|
||||||
|
// fallthrough:
|
||||||
|
|
||||||
|
default:
|
||||||
|
return InsetCollapsable::localDispatch(cmd);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int InsetBox::latex(Buffer const & buf, ostream & os,
|
||||||
|
LatexRunParams const & runparams) const
|
||||||
|
{
|
||||||
|
BoxType btype = boxtranslator().find(params_.type);
|
||||||
|
|
||||||
|
string width_string = params_.width.asLatexString();
|
||||||
|
bool stdwidth(false);
|
||||||
|
if (params_.inner_box &&
|
||||||
|
(width_string.find("1.0\\columnwidth") != string::npos
|
||||||
|
|| width_string.find("1.0\\textwidth") != string::npos)) {
|
||||||
|
stdwidth = true;
|
||||||
|
switch (btype) {
|
||||||
|
case Frameless:
|
||||||
|
break;
|
||||||
|
case Boxed:
|
||||||
|
width_string += " - 2\\fboxsep - 2\\fboxrule";
|
||||||
|
break;
|
||||||
|
case ovalbox:
|
||||||
|
width_string += " - 2\\fboxsep - 0.8pt";
|
||||||
|
break;
|
||||||
|
case Ovalbox:
|
||||||
|
width_string += " - 2\\fboxsep - 1.6pt";
|
||||||
|
break;
|
||||||
|
case Shadowbox:
|
||||||
|
// Shadow falls outside right margin... opinions?
|
||||||
|
width_string += " - 2\\fboxsep - 2\\fboxrule"/* "-\\shadowsize"*/;
|
||||||
|
break;
|
||||||
|
case Doublebox:
|
||||||
|
width_string += " - 2\\fboxsep - 7.5\\fboxrule - 1.0pt";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int i = 0;
|
||||||
|
os << "%\n";
|
||||||
|
// Adapt to column/text width correctly also if paragraphs indented:
|
||||||
|
if (stdwidth)
|
||||||
|
os << "\\noindent";
|
||||||
|
|
||||||
|
switch (btype) {
|
||||||
|
case Frameless:
|
||||||
|
break;
|
||||||
|
case Boxed:
|
||||||
|
os << "\\framebox";
|
||||||
|
if (!params_.inner_box) {
|
||||||
|
os << "{\\makebox";
|
||||||
|
// Special widths, see usrguide §3.5
|
||||||
|
if (params_.special != "none") {
|
||||||
|
os << "[" << params_.width.value()
|
||||||
|
<< "\\" << params_.special << "]";
|
||||||
|
} else
|
||||||
|
os << "[" << width_string << "]";
|
||||||
|
if (params_.hor_pos != 'c')
|
||||||
|
os << "[" << params_.hor_pos << "]";
|
||||||
|
}
|
||||||
|
|
||||||
|
os << "{";
|
||||||
|
break;
|
||||||
|
case ovalbox:
|
||||||
|
os << "\\ovalbox{";
|
||||||
|
break;
|
||||||
|
case Ovalbox:
|
||||||
|
os << "\\Ovalbox{";
|
||||||
|
break;
|
||||||
|
case Shadowbox:
|
||||||
|
os << "\\shadowbox{";
|
||||||
|
break;
|
||||||
|
case Doublebox:
|
||||||
|
os << "\\doublebox{";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (params_.inner_box) {
|
||||||
|
if (params_.use_parbox)
|
||||||
|
os << "\\parbox";
|
||||||
|
else
|
||||||
|
os << "\\begin{minipage}";
|
||||||
|
|
||||||
|
os << "[" << params_.pos << "]";
|
||||||
|
if (params_.height_special == "none") {
|
||||||
|
os << "[" << params_.height.asLatexString() << "]";
|
||||||
|
} else {
|
||||||
|
// Special heights
|
||||||
|
os << "[" << params_.height.value()
|
||||||
|
<< "\\" << params_.height_special << "]";
|
||||||
|
}
|
||||||
|
if (params_.inner_pos != params_.pos)
|
||||||
|
os << "[" << params_.inner_pos << "]";
|
||||||
|
|
||||||
|
os << "{" << width_string << "}";
|
||||||
|
|
||||||
|
if (params_.use_parbox)
|
||||||
|
os << "{";
|
||||||
|
os << "%\n";
|
||||||
|
i += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
i += inset.latex(buf, os, runparams);
|
||||||
|
|
||||||
|
if (params_.inner_box) {
|
||||||
|
if (params_.use_parbox)
|
||||||
|
os << "%\n}";
|
||||||
|
else
|
||||||
|
os << "%\n\\end{minipage}";
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (btype) {
|
||||||
|
case Frameless:
|
||||||
|
break;
|
||||||
|
case Boxed:
|
||||||
|
if (!params_.inner_box)
|
||||||
|
os << "}"; // for makebox
|
||||||
|
os << "}";
|
||||||
|
break;
|
||||||
|
case ovalbox:
|
||||||
|
case Ovalbox:
|
||||||
|
case Doublebox:
|
||||||
|
case Shadowbox:
|
||||||
|
os << "}";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
os << "%\n";
|
||||||
|
|
||||||
|
i += 3;
|
||||||
|
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int InsetBox::linuxdoc(Buffer const & buf, std::ostream & os) const
|
||||||
|
{
|
||||||
|
return inset.linuxdoc(buf, os);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int InsetBox::docbook(Buffer const & buf, std::ostream & os, bool mixcont) const
|
||||||
|
{
|
||||||
|
return inset.docbook(buf, os, mixcont);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int InsetBox::ascii(Buffer const & buf, std::ostream & os, int ll) const
|
||||||
|
{
|
||||||
|
int i = 0;
|
||||||
|
string const pt = params_.type;
|
||||||
|
BoxType btype = boxtranslator().find(params_.type);
|
||||||
|
switch (btype) {
|
||||||
|
case Frameless:
|
||||||
|
break;
|
||||||
|
case Boxed:
|
||||||
|
os << "[";
|
||||||
|
break;
|
||||||
|
case ovalbox:
|
||||||
|
os << "(";
|
||||||
|
break;
|
||||||
|
case Ovalbox:
|
||||||
|
os << "((";
|
||||||
|
break;
|
||||||
|
case Shadowbox:
|
||||||
|
os << "[";
|
||||||
|
break;
|
||||||
|
case Doublebox:
|
||||||
|
os << "[[";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
i = inset.ascii(buf, os, ll);
|
||||||
|
|
||||||
|
switch (btype) {
|
||||||
|
case Frameless:
|
||||||
|
break;
|
||||||
|
case Boxed:
|
||||||
|
os << "]";
|
||||||
|
break;
|
||||||
|
case ovalbox:
|
||||||
|
os << ")";
|
||||||
|
break;
|
||||||
|
case Ovalbox:
|
||||||
|
os << "))";
|
||||||
|
break;
|
||||||
|
case Shadowbox:
|
||||||
|
os << "]/";
|
||||||
|
break;
|
||||||
|
case Doublebox:
|
||||||
|
os << "]]";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void InsetBox::validate(LaTeXFeatures & features) const
|
||||||
|
{
|
||||||
|
features.require("calc");
|
||||||
|
BoxType btype = boxtranslator().find(params_.type);
|
||||||
|
switch (btype) {
|
||||||
|
case Frameless:
|
||||||
|
case Boxed:
|
||||||
|
break;
|
||||||
|
case ovalbox:
|
||||||
|
case Ovalbox:
|
||||||
|
case Shadowbox:
|
||||||
|
case Doublebox:
|
||||||
|
features.require("fancybox");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
inset.validate(features);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
InsetBoxMailer::InsetBoxMailer(InsetBox & inset)
|
||||||
|
: inset_(inset)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
string const InsetBoxMailer::name_ = "box";
|
||||||
|
|
||||||
|
|
||||||
|
string const InsetBoxMailer::inset2string(Buffer const &) const
|
||||||
|
{
|
||||||
|
return params2string(inset_.params());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
string const InsetBoxMailer::params2string(InsetBoxParams const & params)
|
||||||
|
{
|
||||||
|
ostringstream data;
|
||||||
|
data << "box" << ' ';
|
||||||
|
params.write(data);
|
||||||
|
return data.str();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void InsetBoxMailer::string2params(string const & in,
|
||||||
|
InsetBoxParams & params)
|
||||||
|
{
|
||||||
|
params = InsetBoxParams(string());
|
||||||
|
|
||||||
|
if (in.empty())
|
||||||
|
return;
|
||||||
|
|
||||||
|
istringstream data(in);
|
||||||
|
LyXLex lex(0,0);
|
||||||
|
lex.setStream(data);
|
||||||
|
|
||||||
|
string token;
|
||||||
|
lex.next();
|
||||||
|
token = lex.getString();
|
||||||
|
lex.next();
|
||||||
|
|
||||||
|
params.read(lex);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
InsetBoxParams::InsetBoxParams(string const & label)
|
||||||
|
: type(label),
|
||||||
|
use_parbox(false),
|
||||||
|
inner_box(true),
|
||||||
|
width(LyXLength("100col%")),
|
||||||
|
special("none"),
|
||||||
|
pos('t'),
|
||||||
|
hor_pos('c'),
|
||||||
|
inner_pos('t'),
|
||||||
|
height(LyXLength("1in")),
|
||||||
|
height_special("totalheight") // default is 1\\totalheight
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
void InsetBoxParams::write(ostream & os) const
|
||||||
|
{
|
||||||
|
os << type << "\n";
|
||||||
|
os << "position \"" << pos << "\"\n";
|
||||||
|
os << "hor_pos \"" << hor_pos << "\"\n";
|
||||||
|
os << "has_inner_box " << inner_box << "\n";
|
||||||
|
os << "inner_pos \"" << inner_pos << "\"\n";
|
||||||
|
os << "use_parbox " << use_parbox << "\n";
|
||||||
|
os << "width \"" << width.asString() << "\"\n";
|
||||||
|
os << "special \"" << special << "\"\n";
|
||||||
|
os << "height \"" << height.asString() << "\"\n";
|
||||||
|
os << "height_special \"" << height_special << "\"\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void InsetBoxParams::read(LyXLex & lex)
|
||||||
|
{
|
||||||
|
if (lex.isOK()) {
|
||||||
|
type = lex.getString();
|
||||||
|
}
|
||||||
|
string token;
|
||||||
|
if (!lex.isOK())
|
||||||
|
return;
|
||||||
|
lex.next();
|
||||||
|
token = lex.getString();
|
||||||
|
if (token == "position") {
|
||||||
|
lex.next();
|
||||||
|
// The [0] is needed. We need the first and only char in
|
||||||
|
// this string -- MV
|
||||||
|
pos = lex.getString()[0];
|
||||||
|
} else {
|
||||||
|
lyxerr << "InsetBox::Read: Missing 'position'-tag!" << token << endl;
|
||||||
|
lex.pushToken(token);
|
||||||
|
}
|
||||||
|
if (!lex.isOK())
|
||||||
|
return;
|
||||||
|
lex.next();
|
||||||
|
token = lex.getString();
|
||||||
|
if (token == "hor_pos") {
|
||||||
|
lex.next();
|
||||||
|
hor_pos = lex.getString()[0];
|
||||||
|
} else {
|
||||||
|
lyxerr << "InsetBox::Read: Missing 'hor_pos'-tag!" << token << endl;
|
||||||
|
lex.pushToken(token);
|
||||||
|
}
|
||||||
|
if (!lex.isOK())
|
||||||
|
return;
|
||||||
|
lex.next();
|
||||||
|
token = lex.getString();
|
||||||
|
if (token == "has_inner_box") {
|
||||||
|
lex.next();
|
||||||
|
inner_box = lex.getInteger();
|
||||||
|
} else {
|
||||||
|
lyxerr << "InsetBox::Read: Missing 'has_inner_box'-tag!" << endl;
|
||||||
|
lex.pushToken(token);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!lex.isOK())
|
||||||
|
return;
|
||||||
|
lex.next();
|
||||||
|
token = lex.getString();
|
||||||
|
if (token == "inner_pos") {
|
||||||
|
lex.next();
|
||||||
|
inner_pos = lex.getString()[0];
|
||||||
|
} else {
|
||||||
|
lyxerr << "InsetBox::Read: Missing 'inner_pos'-tag!"
|
||||||
|
<< token << endl;
|
||||||
|
lex.pushToken(token);
|
||||||
|
}
|
||||||
|
if (!lex.isOK())
|
||||||
|
return;
|
||||||
|
lex.next();
|
||||||
|
token = lex.getString();
|
||||||
|
if (token == "use_parbox") {
|
||||||
|
lex.next();
|
||||||
|
use_parbox = lex.getInteger();
|
||||||
|
} else {
|
||||||
|
lyxerr << "InsetBox::Read: Missing 'use_parbox'-tag!" << endl;
|
||||||
|
lex.pushToken(token);
|
||||||
|
}
|
||||||
|
if (!lex.isOK())
|
||||||
|
return;
|
||||||
|
lex.next();
|
||||||
|
token = lex.getString();
|
||||||
|
if (token == "width") {
|
||||||
|
lex.next();
|
||||||
|
width = LyXLength(lex.getString());
|
||||||
|
} else {
|
||||||
|
lyxerr << "InsetBox::Read: Missing 'width'-tag!" << endl;
|
||||||
|
lex.pushToken(token);
|
||||||
|
}
|
||||||
|
if (!lex.isOK())
|
||||||
|
return;
|
||||||
|
lex.next();
|
||||||
|
token = lex.getString();
|
||||||
|
if (token == "special") {
|
||||||
|
lex.next();
|
||||||
|
special = lex.getString();
|
||||||
|
} else {
|
||||||
|
lyxerr << "InsetBox::Read: Missing 'special'-tag!" << endl;
|
||||||
|
lex.pushToken(token);
|
||||||
|
}
|
||||||
|
if (!lex.isOK())
|
||||||
|
return;
|
||||||
|
lex.next();
|
||||||
|
token = lex.getString();
|
||||||
|
if (token == "height") {
|
||||||
|
lex.next();
|
||||||
|
height = LyXLength(lex.getString());
|
||||||
|
} else {
|
||||||
|
lyxerr << "InsetBox::Read: Missing 'height'-tag!" << endl;
|
||||||
|
lex.pushToken(token);
|
||||||
|
}
|
||||||
|
if (!lex.isOK())
|
||||||
|
return;
|
||||||
|
lex.next();
|
||||||
|
token = lex.getString();
|
||||||
|
if (token == "height_special") {
|
||||||
|
lex.next();
|
||||||
|
height_special = lex.getString();
|
||||||
|
} else {
|
||||||
|
lyxerr << "InsetBox::Read: Missing 'height_special'-tag!" << endl;
|
||||||
|
lex.pushToken(token);
|
||||||
|
}
|
||||||
|
}
|
148
src/insets/insetbox.h
Normal file
148
src/insets/insetbox.h
Normal file
@ -0,0 +1,148 @@
|
|||||||
|
// -*- C++ -*-
|
||||||
|
/**
|
||||||
|
* \file insetbox.h
|
||||||
|
* This file is part of LyX, the document processor.
|
||||||
|
* Licence details can be found in the file COPYING.
|
||||||
|
*
|
||||||
|
* \author Angus Leeming
|
||||||
|
* \author Martin Vermeer
|
||||||
|
*
|
||||||
|
* Full author contact details are available in file CREDITS.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef INSETBOX_H
|
||||||
|
#define INSETBOX_H
|
||||||
|
|
||||||
|
|
||||||
|
#include "insetcollapsable.h"
|
||||||
|
#include "lyxlength.h"
|
||||||
|
#include "support/translator.h"
|
||||||
|
|
||||||
|
|
||||||
|
struct InsetBoxParams {
|
||||||
|
///
|
||||||
|
InsetBoxParams(std::string const &);
|
||||||
|
///
|
||||||
|
void write(std::ostream & os) const;
|
||||||
|
///
|
||||||
|
void read(LyXLex & lex);
|
||||||
|
///
|
||||||
|
std::string type;
|
||||||
|
/// Use a parbox (true) or minipage (false)
|
||||||
|
bool use_parbox;
|
||||||
|
/// Do we have an inner parbox or minipage to format paragraphs to
|
||||||
|
/// columnwidth?
|
||||||
|
bool inner_box;
|
||||||
|
///
|
||||||
|
LyXLength width;
|
||||||
|
/// "special" widths, see usrguide.dvi §3.5
|
||||||
|
std::string special;
|
||||||
|
///
|
||||||
|
char pos;
|
||||||
|
///
|
||||||
|
char hor_pos;
|
||||||
|
///
|
||||||
|
char inner_pos;
|
||||||
|
///
|
||||||
|
LyXLength height;
|
||||||
|
///
|
||||||
|
std::string height_special;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/** The fbox/fancybox inset
|
||||||
|
|
||||||
|
*/
|
||||||
|
class InsetBox : public InsetCollapsable {
|
||||||
|
public:
|
||||||
|
///
|
||||||
|
InsetBox(BufferParams const &, std::string const &);
|
||||||
|
/// Copy constructor
|
||||||
|
InsetBox(InsetBox const &);
|
||||||
|
///
|
||||||
|
~InsetBox();
|
||||||
|
///
|
||||||
|
virtual std::auto_ptr<InsetBase> clone() const;
|
||||||
|
///
|
||||||
|
std::string const editMessage() const;
|
||||||
|
///
|
||||||
|
InsetOld::Code lyxCode() const { return InsetOld::BOX_CODE; }
|
||||||
|
///
|
||||||
|
void write(Buffer const &, std::ostream &) const;
|
||||||
|
///
|
||||||
|
void read(Buffer const & buf, LyXLex & lex);
|
||||||
|
///
|
||||||
|
void setButtonLabel();
|
||||||
|
///
|
||||||
|
dispatch_result InsetBox::localDispatch(FuncRequest const &);
|
||||||
|
///
|
||||||
|
void metrics(MetricsInfo &, Dimension &) const;
|
||||||
|
/// show the Box dialog
|
||||||
|
bool showInsetDialog(BufferView * bv) const;
|
||||||
|
///
|
||||||
|
int latex(Buffer const &, std::ostream &,
|
||||||
|
LatexRunParams const &) const;
|
||||||
|
///
|
||||||
|
int linuxdoc(Buffer const &, std::ostream &) const;
|
||||||
|
///
|
||||||
|
int docbook(Buffer const &, std::ostream &, bool) const;
|
||||||
|
///
|
||||||
|
int ascii(Buffer const &, std::ostream &, int) const;
|
||||||
|
///
|
||||||
|
void validate(LaTeXFeatures &) const;
|
||||||
|
///
|
||||||
|
InsetBoxParams const & params() const { return params_; }
|
||||||
|
///
|
||||||
|
enum BoxType {
|
||||||
|
Frameless,
|
||||||
|
Boxed,
|
||||||
|
ovalbox,
|
||||||
|
Ovalbox,
|
||||||
|
Shadowbox,
|
||||||
|
Doublebox
|
||||||
|
};
|
||||||
|
|
||||||
|
private:
|
||||||
|
friend class InsetBoxParams;
|
||||||
|
|
||||||
|
/// used by the constructors
|
||||||
|
void init();
|
||||||
|
///
|
||||||
|
InsetBoxParams params_;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
|
||||||
|
typedef Translator<std::string, InsetBox::BoxType> BoxTranslator;
|
||||||
|
BoxTranslator const & boxtranslator();
|
||||||
|
BoxTranslator const & boxtranslator_loc();
|
||||||
|
|
||||||
|
} // anon
|
||||||
|
|
||||||
|
|
||||||
|
#include "mailinset.h"
|
||||||
|
|
||||||
|
class InsetBoxMailer : public MailInset {
|
||||||
|
public:
|
||||||
|
///
|
||||||
|
InsetBoxMailer(InsetBox & inset);
|
||||||
|
///
|
||||||
|
virtual InsetBase & inset() const { return inset_; }
|
||||||
|
///
|
||||||
|
virtual std::string const & name() const { return name_; }
|
||||||
|
///
|
||||||
|
virtual std::string const inset2string(Buffer const &) const;
|
||||||
|
///
|
||||||
|
static std::string const params2string(InsetBoxParams const &);
|
||||||
|
///
|
||||||
|
static void string2params(std::string const &, InsetBoxParams &);
|
||||||
|
|
||||||
|
private:
|
||||||
|
///
|
||||||
|
static std::string const name_;
|
||||||
|
///
|
||||||
|
InsetBox & inset_;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // INSET_BOX_H
|
@ -323,6 +323,7 @@ enum kb_action {
|
|||||||
// 245
|
// 245
|
||||||
LFUN_INSERT_BRANCH,
|
LFUN_INSERT_BRANCH,
|
||||||
LFUN_INSET_DIALOG_SHOW,
|
LFUN_INSET_DIALOG_SHOW,
|
||||||
|
LFUN_INSERT_BOX,
|
||||||
|
|
||||||
LFUN_LASTACTION // end of the table
|
LFUN_LASTACTION // end of the table
|
||||||
};
|
};
|
||||||
|
@ -525,6 +525,9 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & ev) const
|
|||||||
case InsetOld::BRANCH_CODE:
|
case InsetOld::BRANCH_CODE:
|
||||||
disable = ev.argument != "branch";
|
disable = ev.argument != "branch";
|
||||||
break;
|
break;
|
||||||
|
case InsetOld::BOX_CODE:
|
||||||
|
disable = ev.argument != "box";
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -653,6 +656,9 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & ev) const
|
|||||||
case LFUN_INSERT_NOTE:
|
case LFUN_INSERT_NOTE:
|
||||||
code = InsetOld::NOTE_CODE;
|
code = InsetOld::NOTE_CODE;
|
||||||
break;
|
break;
|
||||||
|
case LFUN_INSERT_BOX:
|
||||||
|
code = InsetOld::BOX_CODE;
|
||||||
|
break;
|
||||||
case LFUN_INSERT_BRANCH:
|
case LFUN_INSERT_BRANCH:
|
||||||
code = InsetOld::BRANCH_CODE;
|
code = InsetOld::BRANCH_CODE;
|
||||||
if (buf->params().branchlist().empty())
|
if (buf->params().branchlist().empty())
|
||||||
|
@ -1505,6 +1505,7 @@ InsetOld::RESULT LyXText::dispatch(FuncRequest const & cmd)
|
|||||||
case LFUN_INSET_CAPTION:
|
case LFUN_INSET_CAPTION:
|
||||||
#endif
|
#endif
|
||||||
case LFUN_INSERT_NOTE:
|
case LFUN_INSERT_NOTE:
|
||||||
|
case LFUN_INSERT_BOX:
|
||||||
case LFUN_INSERT_BRANCH:
|
case LFUN_INSERT_BRANCH:
|
||||||
case LFUN_INSERT_BIBITEM:
|
case LFUN_INSERT_BIBITEM:
|
||||||
case LFUN_INSET_ERT:
|
case LFUN_INSET_ERT:
|
||||||
|
Loading…
Reference in New Issue
Block a user