+
+
+2002-08-21 André Pönitz <poenitz@gmx.net>
+
+ * ui/default.ui: adjust to "tabular unification"
+
2002-08-15 Juergen Spitzmueller <j.spitzmueller@gmx.de>
* bind/de_menus.bind: cleanup shortcuts for section layouts. Starred
\bind "M-m t e" "math-mutate eqnarray"
\bind "M-m t m" "math-mutate multline"
-\bind "M-m c i" "math-column-insert"
-\bind "M-m c d" "math-column-delete"
-
-\bind "M-m w i" "math-row-insert"
-\bind "M-m w d" "math-row-delete"
-
-\bind "M-m a v t" "math-valign top"
-\bind "M-m a v c" "math-valign center"
-\bind "M-m a v b" "math-valign bottom"
-\bind "M-m a h l" "math-halign left"
-\bind "M-m a h c" "math-halign center"
-\bind "M-m a h r" "math-halign right"
+\bind "M-m c i" "tabular-feature insert-column"
+\bind "M-m c d" "tabular-feature delete-column"
+\bind "M-m c c" "tabular-feature copy-column"
+\bind "M-m c s" "tabular-feature swap-column"
+
+\bind "M-m w i" "tabular-feature insert-row"
+\bind "M-m w d" "tabular-feature delete-row"
+\bind "M-m w c" "tabular-feature copy-row"
+\bind "M-m w s" "tabular-feature swap-row"
+
+\bind "M-m w t" "tabular-feature valign-top"
+\bind "M-m w m" "tabular-feature valign-center"
+\bind "M-m w b" "tabular-feature valign-bottom"
+\bind "M-m c l" "tabular-feature align-left"
+\bind "M-m c m" "tabular-feature align-center"
+\bind "M-m c r" "tabular-feature align-right"
# Decoration accents
Separator
Item "Add Row|A" "tabular-feature append-row"
Item "Delete Row|w" "tabular-feature delete-row"
+ Item "Copy Row" "tabular-feature copy-row"
+ Item "Swap Rows" "tabular-feature swap-row"
Separator
Item "Add Column|u" "tabular-feature append-column"
Item "Delete Column|D" "tabular-feature delete-column"
+ Item "Copy Column" "tabular-feature copy-column"
+ Item "Swap Columns" "tabular-feature swap-column"
End
Menu "edit_math"
Submenu "Change formula type...|t" "edit_math_mutate"
Separator
Submenu "Use computer algebra system|t" "edit_math_extern"
- Separator
- Item "Align Left|f" "math-halign left"
- Item "Align Center|C" "math-halign center"
- Item "Align Right|R" "math-halign right"
- Separator
- Item "V.Align Top|T" "math-valign top"
- Item "V.Align Center|e" "math-valign center"
- Item "V.Align Bottom|B" "math-valign bottom"
- Separator
- Item "Add Row" "math-row-insert"
- Item "Delete Row" "math-row-delete"
- Separator
- Item "Add Column" "math-column-insert"
- Item "Delete Column" "math-column-delete"
+
+ #Item "Line Top|T" "tabular-feature toggle-line-top"
+ #Item "Line Bottom|B" "tabular-feature toggle-line-bottom"
+ #Item "Line Left|L" "tabular-feature toggle-line-left"
+ #Item "Line Right|R" "tabular-feature toggle-line-right"
+ #Separator
End
Menu "edit_math_extern"
+
+2002-08-20 André Pönitz <poenitz@gmx.net>
+
+ * commandtags.h: new LFUNs for swapping/copying table row/colums
+
+ * LyXAction.C:
+ * lyxfunc.C: support for new lfuns
+
2002-08-21 Lars Gullik Bjønnes <larsbj@gullik.net>
* tabular.C:
{ LFUN_MATH_NONUMBER, "math-nonumber", "", Noop },
{ LFUN_MATH_NUMBER, "math-number", "", Noop },
{ LFUN_MATH_EXTERN, "math-extern", "", Noop },
- { LFUN_MATH_VALIGN, "math-valign", "", Noop },
- { LFUN_MATH_HALIGN, "math-halign", "", Noop },
- { LFUN_MATH_ROW_INSERT, "math-row-insert", "", Noop },
- { LFUN_MATH_ROW_DELETE, "math-row-delete", "", Noop },
- { LFUN_MATH_COLUMN_INSERT, "math-column-insert", "", Noop },
- { LFUN_MATH_COLUMN_DELETE, "math-column-delete", "", Noop },
{ LFUN_MATH_PANEL, "math-panel", "", Noop },
{ LFUN_MATH_SIZE, "math-size", "", Noop },
{ LFUN_MENU_OPEN_BY_NAME, "menu-open", "", NoBuffer },
LFUN_MATH_MACRO, // ale970510
LFUN_MATH_EXTERN, // 120 // Andre' 20010424
LFUN_MATH_PANEL, // Andre' 20010522
- LFUN_MATH_VALIGN, // Andre' 20010522
- LFUN_MATH_HALIGN, // Andre' 20010522
- LFUN_MATH_ROW_INSERT, // Andre' 20010522
- LFUN_MATH_ROW_DELETE, // Andre' 20010522
- LFUN_MATH_COLUMN_INSERT, // Andre' 20010522
- LFUN_MATH_COLUMN_DELETE, // Andre' 20010522
LFUN_MATH_MUTATE, // Andre' 20010523
LFUN_MATH_IMPORT_SELECTION, // Andre' 20010704
LFUN_MATH_SPACE, // Andre' 20010725
}
case LFUN_TABULAR_FEATURE:
- disable = true;
+ if (mathcursor) {
+#if 0
+ // FIXME: check temporarily disabled
+ // valign code
+ char align = mathcursor->valign();
+ if (align == '\0') {
+ disable = true;
+ break;
+ }
+ if (ev.argument.empty()) {
+ flag.clear();
+ break;
+ }
+ if (!contains("tcb", ev.argument[0])) {
+ disable = true;
+ break;
+ }
+ flag.setOnOff(ev.argument[0] == align);
+ } else
+ disable = true;
+
+ char align = mathcursor->halign();
+ if (align == '\0') {
+ disable = true;
+ break;
+ }
+ if (ev.argument.empty()) {
+ flag.clear();
+ break;
+ }
+ if (!contains("lcr", ev.argument[0])) {
+ disable = true;
+ break;
+ }
+ flag.setOnOff(ev.argument[0] == align);
+#endif
+
+ disable = !mathcursor->halign();
+ break;
+ }
+
if (tli) {
FuncStatus ret;
//ret.disabled(true);
case LFUN_LATEX_LOG:
disable = !IsFileReadable(buf->getLogName().second);
break;
- case LFUN_MATH_VALIGN:
- if (mathcursor) {
- char align = mathcursor->valign();
- if (align == '\0') {
- disable = true;
- break;
- }
- if (ev.argument.empty()) {
- flag.clear();
- break;
- }
- if (!contains("tcb", ev.argument[0])) {
- disable = true;
- break;
- }
- flag.setOnOff(ev.argument[0] == align);
- } else
- disable = true;
- break;
-
- case LFUN_MATH_HALIGN:
- if (mathcursor) {
- char align = mathcursor->halign();
- if (align == '\0') {
- disable = true;
- break;
- }
- if (ev.argument.empty()) {
- flag.clear();
- break;
- }
- if (!contains("lcr", ev.argument[0])) {
- disable = true;
- break;
- }
- flag.setOnOff(ev.argument[0] == align);
- } else
- disable = true;
- break;
case LFUN_MATH_MUTATE:
if (mathcursor)
disable = !mathcursor;
break;
- // we need to be math mode and a math array for that
- // Hack: halign produces non-zero result iff we are in a math array
- case LFUN_MATH_ROW_INSERT:
- case LFUN_MATH_ROW_DELETE:
- case LFUN_MATH_COLUMN_INSERT:
- case LFUN_MATH_COLUMN_DELETE:
- disable = !mathcursor || !mathcursor->halign();
- break;
-
default:
break;
}
case LFUN_MATH_MUTATE:
case LFUN_MATH_DISPLAY:
- case LFUN_MATH_HALIGN:
- case LFUN_MATH_VALIGN:
- case LFUN_MATH_ROW_INSERT:
- case LFUN_MATH_ROW_DELETE:
- case LFUN_MATH_COLUMN_INSERT:
- case LFUN_MATH_COLUMN_DELETE:
case LFUN_MATH_NUMBER:
case LFUN_MATH_NONUMBER:
case LFUN_TABINSERT:
case LFUN_DELETE_LINE_FORWARD:
case LFUN_INSERT_LABEL:
case LFUN_MATH_EXTERN:
+ case LFUN_TABULAR_FEATURE:
bv->lockedInsetStoreUndo(Undo::EDIT);
mathcursor->dispatch(cmd);
updateLocal(bv, true);
}
+void MathGridInset::copyRow(row_type row)
+{
+ addRow(row);
+ for (col_type col = 0; col < ncols(); ++col)
+ cells_[(row + 1) * ncols() + col] = cells_[row * ncols() + col];
+}
+
+
+void MathGridInset::swapRow(row_type row)
+{
+ if (nrows() == 1)
+ return;
+ if (row + 1 == nrows())
+ --row;
+ for (col_type col = 0; col < ncols(); ++col)
+ swap(cells_[row * ncols() + col], cells_[(row + 1) * ncols() + col]);
+}
+
+
void MathGridInset::addCol(col_type newcol)
{
const col_type nc = ncols();
}
+void MathGridInset::copyCol(col_type col)
+{
+ addCol(col);
+ for (row_type row = 0; row < nrows(); ++row)
+ cells_[row * ncols() + col + 1] = cells_[row * ncols() + col];
+}
+
+
+void MathGridInset::swapCol(col_type col)
+{
+ if (ncols() == 1)
+ return;
+ if (col + 1 == ncols())
+ --col;
+ for (row_type row = 0; row < nrows(); ++row)
+ swap(cells_[row * ncols() + col], cells_[row * ncols() + col + 1]);
+}
+
+
int MathGridInset::cellXOffset(idx_type idx) const
{
col_type c = col(idx);
return DISPATCHED_POP;
}
- case LFUN_MATH_HALIGN:
- halign((cmd.argument + "c")[0], col(idx));
- return DISPATCHED_POP;
-
- case LFUN_MATH_VALIGN:
- valign((cmd.argument + "c")[0]);
- return DISPATCHED_POP;
-
- case LFUN_MATH_ROW_INSERT:
- addRow(row(idx));
- return DISPATCHED_POP;
-
- case LFUN_MATH_ROW_DELETE:
- delRow(row(idx));
- if (idx > nargs())
- idx -= ncols();
- return DISPATCHED_POP;
-
- case LFUN_MATH_COLUMN_INSERT: {
- row_type r = row(idx);
- col_type c = col(idx);
- addFancyCol(c);
- idx = index(r, c);
- return DISPATCHED_POP;
- }
-
- case LFUN_MATH_COLUMN_DELETE: {
- row_type r = row(idx);
- col_type c = col(idx);
- delFancyCol(col(idx));
- idx = index(r, c);
- if (idx > nargs())
- idx -= ncols();
+ case LFUN_TABULAR_FEATURE:
+ //lyxerr << "handling tabular-feature " << cmd.argument << "\n";
+ if (cmd.argument == "valign-top")
+ valign('t');
+ else if (cmd.argument == "valign-center")
+ valign('c');
+ else if (cmd.argument == "valign-bottom")
+ valign('b');
+ else if (cmd.argument == "align-left")
+ halign('l', col(idx));
+ else if (cmd.argument == "align-right")
+ halign('r', col(idx));
+ else if (cmd.argument == "align-center")
+ halign('c', col(idx));
+ else if (cmd.argument == "append-row")
+ addRow(row(idx));
+ else if (cmd.argument == "delete-row") {
+ delRow(row(idx));
+ if (idx > nargs())
+ idx -= ncols();
+ } else if (cmd.argument == "copy-row")
+ copyRow(row(idx));
+ else if (cmd.argument == "swap-row")
+ swapRow(row(idx));
+ else if (cmd.argument == "append-column") {
+ row_type r = row(idx);
+ col_type c = col(idx);
+ addCol(c);
+ idx = index(r, c);
+ } else if (cmd.argument == "delete-column") {
+ row_type r = row(idx);
+ col_type c = col(idx);
+ delCol(col(idx));
+ idx = index(r, c);
+ if (idx > nargs())
+ idx -= ncols();
+ } else if (cmd.argument == "copy-column")
+ copyCol(col(idx));
+ else if (cmd.argument == "swap-column")
+ swapCol(col(idx));
+ else
+ return UNDISPATCHED;
return DISPATCHED_POP;
- }
case LFUN_PASTE: {
//lyxerr << "pasting '" << cmd.argument << "'\n";
///
virtual void delRow(row_type r);
///
- virtual void addFancyRow(row_type r) { addRow(r); }
+ virtual void copyRow(row_type r);
///
- virtual void delFancyRow(row_type r) { delRow(r); }
+ virtual void swapRow(row_type r);
///
virtual void addCol(col_type c);
///
virtual void delCol(col_type c);
///
- virtual void addFancyCol(col_type c) { addCol(c); }
+ virtual void copyCol(col_type c);
///
- virtual void delFancyCol(col_type c) { delCol(c); }
+ virtual void swapCol(col_type c);
///
virtual void appendRow();
///
}
+bool MathHullInset::colChangeOK() const
+{
+ return type_ == "align" || type_ == "alignat" || type_ == "xalignat";
+}
+
+
void MathHullInset::addRow(row_type row)
{
nonum_.insert(nonum_.begin() + row + 1, !numberedType());
}
-void MathHullInset::addFancyCol(col_type col)
+void MathHullInset::addCol(col_type col)
{
- if (type_ == "equation")
- mutate("eqnarray");
-
- else if (type_ == "eqnarray") {
- mutate("align");
- addFancyCol(col);
- }
-
- else if (type_ == "align" || type_ == "alignat"
- || type_ == "xalignat" || type_ == "xxalignat")
+ if (colChangeOK())
MathGridInset::addCol(col);
+ else
+ lyxerr << "Can't change number of columns in '" << type_ << "'\n";
}
-void MathHullInset::delFancyCol(col_type col)
+void MathHullInset::delCol(col_type col)
{
- if (type_ == "alignat" || type_ == "xalignat" || type_ == "xxalignat")
+ if (colChangeOK())
MathGridInset::delCol(col);
+ else
+ lyxerr << "Can't change number of columns in '" << type_ << "'\n";
}
}
else if (type_ == "multline") {
- if (newtype == "gather") {
- setType("gather");
+ if (newtype == "gather" || newtype == "align" ||
+ newtype == "xalign" || newtype == "xxalign")
+ setType(newtype);
+ else if (newtype == "eqnarray") {
+ MathGridInset::addCol(1);
+ MathGridInset::addCol(1);
+ setType("eqnarray");
} else {
lyxerr << "mutation from '" << type_
- << "' to '" << newtype << "' not implemented"
- << endl;
+ << "' to '" << newtype << "' not implemented" << endl;
}
}
return DISPATCHED;
}
- case LFUN_MATH_HALIGN:
- case LFUN_MATH_VALIGN:
- // we explicitly don't want the default behaviour here
- return UNDISPATCHED;
-
case LFUN_MATH_EXTERN:
doExtern(cmd, idx, pos);
return DISPATCHED_POP;
/// identifies HullInset
MathHullInset * asHullInset() { return this; }
- ///
- void addRow(row_type);
- ///
- void delRow(row_type);
- ///
- void addFancyCol(col_type);
- ///
- void delFancyCol(col_type);
+ /// add a row
+ void addRow(row_type row);
+ /// delete a row
+ void delRow(row_type row);
+ /// add a column
+ void addCol(col_type col);
+ /// delete a column
+ void delCol(col_type col);
/// get type
string const & getType() const;
char const * standardFont() const;
/// consistency check
void check() const;
+ /// can this change its number of cols?
+ bool colChangeOK() const;
/// "none", "simple", "display", "eqnarray",...
string type_;