1999-09-27 18:44:28 +00:00
|
|
|
#include <config.h>
|
|
|
|
|
1999-10-02 16:21:10 +00:00
|
|
|
#include <cstdlib>
|
1999-09-27 18:44:28 +00:00
|
|
|
#include "definitions.h"
|
|
|
|
#include FORMS_H_LOCATION
|
|
|
|
#include "layout_forms.h"
|
|
|
|
#include "LString.h"
|
|
|
|
#include "minibuffer.h"
|
|
|
|
#include "vspace.h"
|
|
|
|
#include "buffer.h"
|
|
|
|
#include "BufferView.h"
|
|
|
|
#include "lyxparagraph.h"
|
|
|
|
#include "gettext.h"
|
|
|
|
#include "lyxtext.h"
|
|
|
|
|
|
|
|
extern FD_form_paragraph_extra *fd_form_paragraph_extra;
|
|
|
|
extern MiniBuffer *minibuffer;
|
|
|
|
extern BufferView *current_view;
|
|
|
|
extern void BeforeChange();
|
|
|
|
static bool CheckInputWidth();
|
|
|
|
|
|
|
|
inline void DeactivateParagraphExtraButtons ()
|
|
|
|
{
|
|
|
|
fl_deactivate_object (fd_form_paragraph_extra->button_ok);
|
|
|
|
fl_deactivate_object (fd_form_paragraph_extra->button_apply);
|
|
|
|
fl_set_object_lcol (fd_form_paragraph_extra->button_ok, FL_INACTIVE);
|
|
|
|
fl_set_object_lcol (fd_form_paragraph_extra->button_apply, FL_INACTIVE);
|
|
|
|
}
|
|
|
|
|
|
|
|
inline void ActivateParagraphExtraButtons ()
|
|
|
|
{
|
|
|
|
fl_activate_object (fd_form_paragraph_extra->button_ok);
|
|
|
|
fl_activate_object (fd_form_paragraph_extra->button_apply);
|
|
|
|
fl_set_object_lcol (fd_form_paragraph_extra->button_ok, FL_BLACK);
|
|
|
|
fl_set_object_lcol (fd_form_paragraph_extra->button_apply, FL_BLACK);
|
|
|
|
}
|
|
|
|
|
|
|
|
inline void DisableParagraphExtra ()
|
|
|
|
{
|
|
|
|
DeactivateParagraphExtraButtons();
|
|
|
|
fl_deactivate_object (fd_form_paragraph_extra->input_pextra_width);
|
|
|
|
fl_deactivate_object (fd_form_paragraph_extra->input_pextra_widthp);
|
|
|
|
fl_deactivate_object (fd_form_paragraph_extra->group_alignment);
|
|
|
|
fl_deactivate_object (fd_form_paragraph_extra->radio_pextra_top);
|
|
|
|
fl_deactivate_object (fd_form_paragraph_extra->radio_pextra_middle);
|
|
|
|
fl_deactivate_object (fd_form_paragraph_extra->radio_pextra_bottom);
|
|
|
|
fl_deactivate_object (fd_form_paragraph_extra->text_warning);
|
|
|
|
fl_deactivate_object (fd_form_paragraph_extra->group_extraopt);
|
|
|
|
fl_deactivate_object (fd_form_paragraph_extra->radio_pextra_indent);
|
|
|
|
fl_deactivate_object (fd_form_paragraph_extra->radio_pextra_minipage);
|
|
|
|
fl_deactivate_object (fd_form_paragraph_extra->radio_pextra_floatflt);
|
|
|
|
fl_deactivate_object (fd_form_paragraph_extra->radio_pextra_hfill);
|
|
|
|
fl_deactivate_object (fd_form_paragraph_extra->radio_pextra_startmp);
|
|
|
|
}
|
|
|
|
|
|
|
|
inline void EnableParagraphExtra ()
|
|
|
|
{
|
|
|
|
ActivateParagraphExtraButtons();
|
|
|
|
fl_activate_object (fd_form_paragraph_extra->input_pextra_width);
|
|
|
|
fl_activate_object (fd_form_paragraph_extra->input_pextra_widthp);
|
|
|
|
fl_activate_object (fd_form_paragraph_extra->group_alignment);
|
|
|
|
fl_activate_object (fd_form_paragraph_extra->radio_pextra_top);
|
|
|
|
fl_activate_object (fd_form_paragraph_extra->radio_pextra_middle);
|
|
|
|
fl_activate_object (fd_form_paragraph_extra->radio_pextra_bottom);
|
|
|
|
fl_activate_object (fd_form_paragraph_extra->text_warning);
|
|
|
|
fl_activate_object (fd_form_paragraph_extra->group_extraopt);
|
|
|
|
fl_activate_object (fd_form_paragraph_extra->radio_pextra_indent);
|
|
|
|
fl_activate_object (fd_form_paragraph_extra->radio_pextra_minipage);
|
|
|
|
fl_activate_object (fd_form_paragraph_extra->radio_pextra_floatflt);
|
|
|
|
fl_activate_object (fd_form_paragraph_extra->radio_pextra_hfill);
|
|
|
|
fl_activate_object (fd_form_paragraph_extra->radio_pextra_startmp);
|
|
|
|
}
|
|
|
|
|
|
|
|
bool UpdateParagraphExtra()
|
|
|
|
{
|
|
|
|
bool update = false;
|
|
|
|
if (current_view->getScreen() && current_view->available()) {
|
|
|
|
update = true;
|
1999-11-09 23:52:04 +00:00
|
|
|
LyXParagraph * par = current_view->buffer()->text->cursor.par;
|
1999-09-27 18:44:28 +00:00
|
|
|
|
|
|
|
EnableParagraphExtra();
|
|
|
|
|
|
|
|
fl_activate_object(fd_form_paragraph_extra->input_pextra_width);
|
|
|
|
fl_activate_object(fd_form_paragraph_extra->input_pextra_widthp);
|
|
|
|
fl_set_input(fd_form_paragraph_extra->input_pextra_width,
|
|
|
|
par->pextra_width.c_str());
|
|
|
|
fl_set_input(fd_form_paragraph_extra->input_pextra_widthp,
|
|
|
|
par->pextra_widthp.c_str());
|
|
|
|
switch(par->pextra_alignment) {
|
|
|
|
case MINIPAGE_ALIGN_TOP:
|
|
|
|
fl_set_button(fd_form_paragraph_extra->radio_pextra_top,1);
|
|
|
|
break;
|
|
|
|
case MINIPAGE_ALIGN_MIDDLE:
|
|
|
|
fl_set_button(fd_form_paragraph_extra->radio_pextra_middle,1);
|
|
|
|
break;
|
|
|
|
case MINIPAGE_ALIGN_BOTTOM:
|
|
|
|
fl_set_button(fd_form_paragraph_extra->radio_pextra_bottom,1);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
fl_set_button(fd_form_paragraph_extra->radio_pextra_hfill,
|
|
|
|
par->pextra_hfill);
|
|
|
|
fl_set_button(fd_form_paragraph_extra->radio_pextra_startmp,
|
|
|
|
par->pextra_start_minipage);
|
|
|
|
CheckInputWidth();
|
|
|
|
if (par->pextra_type == PEXTRA_INDENT) {
|
|
|
|
fl_set_button(fd_form_paragraph_extra->radio_pextra_indent,1);
|
|
|
|
fl_set_button(fd_form_paragraph_extra->radio_pextra_minipage,0);
|
|
|
|
fl_set_button(fd_form_paragraph_extra->radio_pextra_floatflt,0);
|
|
|
|
fl_deactivate_object(fd_form_paragraph_extra->radio_pextra_top);
|
|
|
|
fl_deactivate_object(fd_form_paragraph_extra->radio_pextra_middle);
|
|
|
|
fl_deactivate_object(fd_form_paragraph_extra->radio_pextra_bottom);
|
|
|
|
} else if (par->pextra_type == PEXTRA_MINIPAGE) {
|
|
|
|
fl_set_button(fd_form_paragraph_extra->radio_pextra_indent,0);
|
|
|
|
fl_set_button(fd_form_paragraph_extra->radio_pextra_minipage,1);
|
|
|
|
fl_set_button(fd_form_paragraph_extra->radio_pextra_floatflt,0);
|
|
|
|
fl_activate_object(fd_form_paragraph_extra->radio_pextra_top);
|
|
|
|
fl_activate_object(fd_form_paragraph_extra->radio_pextra_middle);
|
|
|
|
fl_activate_object(fd_form_paragraph_extra->radio_pextra_bottom);
|
|
|
|
} else if (par->pextra_type == PEXTRA_FLOATFLT) {
|
|
|
|
fl_set_button(fd_form_paragraph_extra->radio_pextra_indent,0);
|
|
|
|
fl_set_button(fd_form_paragraph_extra->radio_pextra_minipage,0);
|
|
|
|
fl_set_button(fd_form_paragraph_extra->radio_pextra_floatflt,1);
|
|
|
|
fl_deactivate_object(fd_form_paragraph_extra->radio_pextra_top);
|
|
|
|
fl_deactivate_object(fd_form_paragraph_extra->radio_pextra_middle);
|
|
|
|
fl_deactivate_object(fd_form_paragraph_extra->radio_pextra_bottom);
|
|
|
|
} else {
|
|
|
|
fl_set_button(fd_form_paragraph_extra->radio_pextra_indent,0);
|
|
|
|
fl_set_button(fd_form_paragraph_extra->radio_pextra_minipage,0);
|
|
|
|
fl_deactivate_object(fd_form_paragraph_extra->input_pextra_width);
|
|
|
|
fl_deactivate_object(fd_form_paragraph_extra->input_pextra_widthp);
|
|
|
|
fl_deactivate_object(fd_form_paragraph_extra->radio_pextra_top);
|
|
|
|
fl_deactivate_object(fd_form_paragraph_extra->radio_pextra_middle);
|
|
|
|
fl_deactivate_object(fd_form_paragraph_extra->radio_pextra_bottom);
|
|
|
|
}
|
|
|
|
if (par->pextra_type == PEXTRA_NONE)
|
|
|
|
ActivateParagraphExtraButtons();
|
|
|
|
}
|
|
|
|
fl_hide_object(fd_form_paragraph_extra->text_warning);
|
|
|
|
|
1999-11-09 23:52:04 +00:00
|
|
|
if (current_view->buffer()->isReadonly()) {
|
1999-09-27 18:44:28 +00:00
|
|
|
DisableParagraphExtra();
|
|
|
|
fl_set_object_label(fd_form_paragraph_extra->text_warning,
|
|
|
|
_("Document is read-only. No changes to layout permitted."));
|
|
|
|
fl_show_object(fd_form_paragraph_extra->text_warning);
|
|
|
|
}
|
|
|
|
if (!update && fd_form_paragraph_extra->form_paragraph_extra->visible) {
|
|
|
|
fl_hide_form(fd_form_paragraph_extra->form_paragraph_extra);
|
|
|
|
}
|
|
|
|
return update;
|
|
|
|
}
|
|
|
|
|
|
|
|
void ParagraphExtraOpen(FL_OBJECT *, long)
|
|
|
|
{
|
|
|
|
if (UpdateParagraphExtra()) {
|
|
|
|
if (fd_form_paragraph_extra->form_paragraph_extra->visible) {
|
|
|
|
fl_raise_form(fd_form_paragraph_extra->form_paragraph_extra);
|
|
|
|
} else {
|
|
|
|
fl_show_form(fd_form_paragraph_extra->form_paragraph_extra,
|
1999-10-25 14:50:26 +00:00
|
|
|
FL_PLACE_MOUSE, FL_FULLBORDER,
|
1999-09-27 18:44:28 +00:00
|
|
|
_("ParagraphExtra Layout"));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void ParagraphExtraApplyCB(FL_OBJECT *, long)
|
|
|
|
{
|
|
|
|
if (current_view->getScreen() && current_view->available()) {
|
1999-11-09 23:52:04 +00:00
|
|
|
FD_form_paragraph_extra const * fd = fd_form_paragraph_extra;
|
|
|
|
const char * width = fl_get_input(fd->input_pextra_width);
|
|
|
|
const char * widthp = fl_get_input(fd->input_pextra_widthp);
|
|
|
|
LyXText * text = current_view->buffer()->text;
|
1999-11-04 01:40:20 +00:00
|
|
|
int type = PEXTRA_NONE;
|
|
|
|
int alignment = 0;
|
1999-09-27 18:44:28 +00:00
|
|
|
bool
|
|
|
|
hfill = false,
|
|
|
|
start_minipage = false;
|
|
|
|
|
|
|
|
if (fl_get_button(fd_form_paragraph_extra->radio_pextra_indent)) {
|
|
|
|
type = PEXTRA_INDENT;
|
|
|
|
} else if (fl_get_button(fd_form_paragraph_extra->radio_pextra_minipage)) {
|
|
|
|
type = PEXTRA_MINIPAGE;
|
|
|
|
hfill = fl_get_button(fd_form_paragraph_extra->radio_pextra_hfill);
|
|
|
|
start_minipage =
|
|
|
|
fl_get_button(fd_form_paragraph_extra->radio_pextra_startmp);
|
|
|
|
if (fl_get_button(fd_form_paragraph_extra->radio_pextra_top))
|
|
|
|
alignment = MINIPAGE_ALIGN_TOP;
|
|
|
|
else if (fl_get_button(fd_form_paragraph_extra->radio_pextra_middle))
|
|
|
|
alignment = MINIPAGE_ALIGN_MIDDLE;
|
|
|
|
else if (fl_get_button(fd_form_paragraph_extra->radio_pextra_bottom))
|
|
|
|
alignment = MINIPAGE_ALIGN_BOTTOM;
|
|
|
|
} else if (fl_get_button(fd_form_paragraph_extra->radio_pextra_floatflt)) {
|
|
|
|
type = PEXTRA_FLOATFLT;
|
|
|
|
}
|
|
|
|
text->SetParagraphExtraOpt(type,width,widthp,alignment,hfill,
|
|
|
|
start_minipage);
|
1999-11-09 23:52:04 +00:00
|
|
|
current_view->buffer()->update(1);
|
1999-09-27 18:44:28 +00:00
|
|
|
minibuffer->Set(_("ParagraphExtra layout set"));
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
void ParagraphExtraCancelCB(FL_OBJECT *, long)
|
|
|
|
{
|
|
|
|
fl_hide_form(fd_form_paragraph_extra->form_paragraph_extra);
|
|
|
|
}
|
|
|
|
|
|
|
|
void ParagraphExtraOKCB(FL_OBJECT *ob, long data)
|
|
|
|
{
|
|
|
|
ParagraphExtraCancelCB(ob,data);
|
|
|
|
ParagraphExtraApplyCB(ob,data);
|
|
|
|
}
|
|
|
|
|
|
|
|
void CheckPExtraOptCB(FL_OBJECT *ob, long)
|
|
|
|
{
|
|
|
|
int
|
|
|
|
n;
|
1999-10-02 16:21:10 +00:00
|
|
|
string
|
1999-09-27 18:44:28 +00:00
|
|
|
s1, s2;
|
|
|
|
|
|
|
|
ActivateParagraphExtraButtons();
|
|
|
|
CheckInputWidth();
|
|
|
|
if (ob == fd_form_paragraph_extra->radio_pextra_indent) {
|
|
|
|
n = fl_get_button(fd_form_paragraph_extra->radio_pextra_indent);
|
|
|
|
if (n) {
|
|
|
|
fl_set_button(fd_form_paragraph_extra->radio_pextra_minipage,0);
|
|
|
|
fl_set_button(fd_form_paragraph_extra->radio_pextra_floatflt,0);
|
|
|
|
fl_activate_object(fd_form_paragraph_extra->input_pextra_width);
|
|
|
|
fl_activate_object(fd_form_paragraph_extra->input_pextra_widthp);
|
|
|
|
fl_deactivate_object(fd_form_paragraph_extra->radio_pextra_top);
|
|
|
|
fl_deactivate_object(fd_form_paragraph_extra->radio_pextra_middle);
|
|
|
|
fl_deactivate_object(fd_form_paragraph_extra->radio_pextra_bottom);
|
|
|
|
} else {
|
|
|
|
fl_deactivate_object(fd_form_paragraph_extra->input_pextra_width);
|
|
|
|
fl_deactivate_object(fd_form_paragraph_extra->input_pextra_widthp);
|
|
|
|
ActivateParagraphExtraButtons();
|
|
|
|
}
|
|
|
|
} else if (ob == fd_form_paragraph_extra->radio_pextra_minipage) {
|
|
|
|
n = fl_get_button(fd_form_paragraph_extra->radio_pextra_minipage);
|
|
|
|
if (n) {
|
|
|
|
fl_set_button(fd_form_paragraph_extra->radio_pextra_indent,0);
|
|
|
|
fl_set_button(fd_form_paragraph_extra->radio_pextra_floatflt,0);
|
|
|
|
fl_activate_object(fd_form_paragraph_extra->input_pextra_width);
|
|
|
|
fl_activate_object(fd_form_paragraph_extra->input_pextra_widthp);
|
|
|
|
fl_activate_object(fd_form_paragraph_extra->radio_pextra_top);
|
|
|
|
fl_activate_object(fd_form_paragraph_extra->radio_pextra_middle);
|
|
|
|
fl_activate_object(fd_form_paragraph_extra->radio_pextra_bottom);
|
|
|
|
} else {
|
|
|
|
fl_deactivate_object(fd_form_paragraph_extra->input_pextra_width);
|
|
|
|
fl_deactivate_object(fd_form_paragraph_extra->input_pextra_widthp);
|
|
|
|
fl_deactivate_object(fd_form_paragraph_extra->radio_pextra_top);
|
|
|
|
fl_deactivate_object(fd_form_paragraph_extra->radio_pextra_middle);
|
|
|
|
fl_deactivate_object(fd_form_paragraph_extra->radio_pextra_bottom);
|
|
|
|
ActivateParagraphExtraButtons();
|
|
|
|
}
|
|
|
|
} else if (ob == fd_form_paragraph_extra->radio_pextra_floatflt) {
|
|
|
|
n = fl_get_button(fd_form_paragraph_extra->radio_pextra_floatflt);
|
|
|
|
if (n) {
|
|
|
|
fl_set_button(fd_form_paragraph_extra->radio_pextra_indent,0);
|
|
|
|
fl_set_button(fd_form_paragraph_extra->radio_pextra_minipage,0);
|
|
|
|
fl_activate_object(fd_form_paragraph_extra->input_pextra_width);
|
|
|
|
fl_activate_object(fd_form_paragraph_extra->input_pextra_widthp);
|
|
|
|
fl_activate_object(fd_form_paragraph_extra->radio_pextra_top);
|
|
|
|
fl_activate_object(fd_form_paragraph_extra->radio_pextra_middle);
|
|
|
|
fl_activate_object(fd_form_paragraph_extra->radio_pextra_bottom);
|
|
|
|
} else {
|
|
|
|
fl_deactivate_object(fd_form_paragraph_extra->input_pextra_width);
|
|
|
|
fl_deactivate_object(fd_form_paragraph_extra->input_pextra_widthp);
|
|
|
|
fl_deactivate_object(fd_form_paragraph_extra->radio_pextra_top);
|
|
|
|
fl_deactivate_object(fd_form_paragraph_extra->radio_pextra_middle);
|
|
|
|
fl_deactivate_object(fd_form_paragraph_extra->radio_pextra_bottom);
|
|
|
|
ActivateParagraphExtraButtons();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
static bool CheckInputWidth()
|
|
|
|
{
|
1999-10-02 16:21:10 +00:00
|
|
|
string
|
1999-09-27 18:44:28 +00:00
|
|
|
s1,s2;
|
|
|
|
|
|
|
|
s1 = fl_get_input(fd_form_paragraph_extra->input_pextra_width);
|
|
|
|
s2 = fl_get_input(fd_form_paragraph_extra->input_pextra_widthp);
|
|
|
|
if (s1.empty() && s2.empty()) {
|
|
|
|
fl_activate_object(fd_form_paragraph_extra->input_pextra_width);
|
|
|
|
fl_activate_object(fd_form_paragraph_extra->input_pextra_widthp);
|
|
|
|
fl_hide_object(fd_form_paragraph_extra->text_warning);
|
|
|
|
DeactivateParagraphExtraButtons();
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
if (!s1.empty()) { // LyXLength parameter
|
|
|
|
fl_activate_object(fd_form_paragraph_extra->input_pextra_width);
|
|
|
|
fl_deactivate_object(fd_form_paragraph_extra->input_pextra_widthp);
|
|
|
|
if (!isValidLength(s1)) {
|
|
|
|
DeactivateParagraphExtraButtons();
|
|
|
|
fl_set_object_label(fd_form_paragraph_extra->text_warning,
|
|
|
|
_("Warning: Invalid Length (valid example: 10mm)"));
|
|
|
|
fl_show_object(fd_form_paragraph_extra->text_warning);
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
} else { // !s2.empty() % parameter
|
|
|
|
fl_deactivate_object(fd_form_paragraph_extra->input_pextra_width);
|
|
|
|
fl_activate_object(fd_form_paragraph_extra->input_pextra_widthp);
|
|
|
|
if ((atoi(s2.c_str()) < 0 ) || (atoi(s2.c_str()) > 100)) {
|
|
|
|
DeactivateParagraphExtraButtons();
|
|
|
|
fl_set_object_label(fd_form_paragraph_extra->text_warning,
|
|
|
|
_("Warning: Invalid percent value (0-100)"));
|
|
|
|
fl_show_object(fd_form_paragraph_extra->text_warning);
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
fl_hide_object(fd_form_paragraph_extra->text_warning);
|
|
|
|
return true;
|
|
|
|
}
|