]> git.lyx.org Git - lyx.git/blobdiff - src/TableLayout.C
small changes to ButtonController usage
[lyx.git] / src / TableLayout.C
index b944fe6c3ac6c538357f41d685da469a81857267..06f3f138fc89c281ade81a961079183c8698a47e 100644 (file)
@@ -1,8 +1,8 @@
 #include <config.h>
 
 #include <cstdlib>
-#include "definitions.h"
 #include FORMS_H_LOCATION
+
 #include "layout_forms.h"
 #include "lyx_main.h"
 #include "lyxrc.h"
 #include "vspace.h"
 #include "lyx_gui_misc.h"
 #include "BufferView.h"
-#include "lyxscreen.h"
 #include "gettext.h"
 #include "lyxtext.h"
+#include "layout.h"
+#include "insets/lyxinset.h"
 
-extern void BeforeChange();
+// Prototypes
+extern FD_form_table_options * fd_form_table_options;
+extern FD_form_table_extra * fd_form_table_extra;
+extern BufferView * current_view;
 
-/* Prototypes */
-extern FD_form_table_options *fd_form_table_options;
-extern FD_form_table_extra *fd_form_table_extra;
-extern BufferView *current_view;
+#ifndef NEW_TABULAR
+static int Confirmed = false;
+static int ActCell;
 
-static int
-    Confirmed = false,
-    ActCell;
 // hack to keep the cursor from jumping to the end of the text in the Extra
-// form input fields during editing. The values in LyXTable itself is changed in
-// real-time, but we have no callbacks for the input fields, so I simply
-// store and restore the cursor position for now. (too much of a hazzle to
-// do it proper; we'll trash all this code in 1.1 anyway)
-    static int
-       extra_col_cursor_x, // need no y's, one-line input fields
-       extra_multicol_cursor_x;
+// form input fields during editing. The values in LyXTable itself is
+// changed in real-time, but we have no callbacks for the input fields,
+// so I simply store and restore the cursor position for now.
+// (too much of a hazzle to do it proper; we'll trash all this code
+// in 1.1 anyway)
+static int extra_col_cursor_x; // need no y's, one-line input fields
+static int extra_multicol_cursor_x;
+#endif
 // Joacim
 
+
 bool UpdateLayoutTable(int flag)
 {
     bool update = true;
-    if (!current_view->getScreen() || !current_view->available())
+    if (!current_view->available())
         update = false;
-    
-    if (update && current_view->currentBuffer()->text->cursor.par->table) {
-        int
-            align,
-            cell,
-            column,row;
-        char
-            buf[12];
-        string
-            pwidth, special;
-    
-        LyXTable *table = current_view->currentBuffer()->text->cursor.par->table;
 
-        cell = current_view->currentBuffer()->text->
-            NumberOfCell(current_view->currentBuffer()->text->cursor.par, 
-                         current_view->currentBuffer()->text->cursor.pos);
+#ifndef NEW_TABULAR
+    if (update && current_view->text->cursor.par()->table) {
+        char buf[12];
+        string pwidth, special;
+   
+        LyXTable * table = current_view->text->cursor.par()->table;
+
+        int cell = current_view->text->
+            NumberOfCell(current_view->text->cursor.par(), 
+                         current_view->text->cursor.pos());
         ActCell = cell;
-        column = table->column_of_cell(cell)+1;
-        fl_set_object_label(fd_form_table_options->text_warning,"");
+        int column = table->column_of_cell(cell)+1;
+        fl_set_object_label(fd_form_table_options->text_warning, "");
         Confirmed = false;
         fl_activate_object(fd_form_table_extra->input_special_alignment);
         fl_activate_object(fd_form_table_extra->input_special_multialign);
         fl_activate_object(fd_form_table_options->input_column_width);
-        sprintf(buf,"%d",column);
+        sprintf(buf, "%d", column);
         fl_set_input(fd_form_table_options->input_table_column, buf);
         fl_deactivate_object(fd_form_table_options->input_table_column);
-        row = table->row_of_cell(cell)+1;
-        sprintf(buf,"%d",row);
+        int row = table->row_of_cell(cell)+1;
+        sprintf(buf, "%d", row);
         fl_set_input(fd_form_table_options->input_table_row, buf);
         fl_deactivate_object(fd_form_table_options->input_table_row);
         if (table->IsMultiColumn(cell))
@@ -95,11 +92,11 @@ bool UpdateLayoutTable(int flag)
             fl_set_button(fd_form_table_options->radio_border_right, 1);
         else
             fl_set_button(fd_form_table_options->radio_border_right, 0);
-        align = table->GetAlignment(cell);
+        int align = table->GetAlignment(cell);
         fl_set_button(fd_form_table_options->radio_align_left, 0);
         fl_set_button(fd_form_table_options->radio_align_right, 0);
         fl_set_button(fd_form_table_options->radio_align_center, 0);
-        special = table->GetAlignSpecial(cell,LyXTable::SET_SPECIAL_COLUMN);
+        special = table->GetAlignSpecial(cell, LyXTable::SET_SPECIAL_COLUMN);
         if (flag)
        {
             fl_set_input(fd_form_table_extra->input_special_alignment,
@@ -107,9 +104,9 @@ bool UpdateLayoutTable(int flag)
            fl_set_input_cursorpos(fd_form_table_extra->input_special_alignment,
                    extra_col_cursor_x, 0); // restore the cursor
        }
-        if (current_view->currentBuffer()->isReadonly()) 
+        if (current_view->buffer()->isReadonly()) 
             fl_deactivate_object(fd_form_table_extra->input_special_alignment);
-        special = table->GetAlignSpecial(cell,LyXTable::SET_SPECIAL_MULTI);
+        special = table->GetAlignSpecial(cell, LyXTable::SET_SPECIAL_MULTI);
         if (flag)
        {
             fl_set_input(fd_form_table_extra->input_special_multialign,
@@ -117,12 +114,12 @@ bool UpdateLayoutTable(int flag)
            fl_set_input_cursorpos(fd_form_table_extra->input_special_multialign,
                    extra_multicol_cursor_x, 0); // restore the cursor
        }
-        if (current_view->currentBuffer()->isReadonly()) 
+        if (current_view->buffer()->isReadonly()) 
             fl_deactivate_object(fd_form_table_extra->input_special_multialign);
         pwidth = table->GetPWidth(cell);
         if (flag)
-            fl_set_input(fd_form_table_options->input_column_width,pwidth.c_str());
-        if (current_view->currentBuffer()->isReadonly()) 
+            fl_set_input(fd_form_table_options->input_column_width, pwidth.c_str());
+        if (current_view->buffer()->isReadonly()) 
             fl_deactivate_object(fd_form_table_options->input_column_width);
         if (!pwidth.empty()) {
             fl_activate_object(fd_form_table_options->radio_linebreak_cell);
@@ -134,7 +131,7 @@ bool UpdateLayoutTable(int flag)
             fl_deactivate_object(fd_form_table_options->radio_linebreak_cell);
            fl_set_object_lcol(fd_form_table_options->radio_linebreak_cell,
                               FL_INACTIVE);
-            fl_set_button(fd_form_table_options->radio_linebreak_cell,0);
+            fl_set_button(fd_form_table_options->radio_linebreak_cell, 0);
         }
         if ((!pwidth.empty() && !table->IsMultiColumn(cell)) ||
             (align == LYX_ALIGN_LEFT))
@@ -164,7 +161,7 @@ bool UpdateLayoutTable(int flag)
            fl_set_object_lcol(fd_form_table_options->radio_align_center,
                               FL_BLACK);
         }
-        fl_set_button(fd_form_table_options->radio_longtable,table->IsLongTable());
+        fl_set_button(fd_form_table_options->radio_longtable, table->IsLongTable());
         if (table->IsLongTable()) {
             fl_activate_object(fd_form_table_options->radio_lt_firsthead);
             fl_activate_object(fd_form_table_options->radio_lt_head);
@@ -197,11 +194,11 @@ bool UpdateLayoutTable(int flag)
             fl_deactivate_object(fd_form_table_options->radio_lt_foot);
             fl_deactivate_object(fd_form_table_options->radio_lt_lastfoot);
             fl_deactivate_object(fd_form_table_options->radio_lt_newpage);
-            fl_set_button(fd_form_table_options->radio_lt_firsthead,0);
-            fl_set_button(fd_form_table_options->radio_lt_head,0);
-            fl_set_button(fd_form_table_options->radio_lt_foot,0);
-            fl_set_button(fd_form_table_options->radio_lt_lastfoot,0);
-            fl_set_button(fd_form_table_options->radio_lt_newpage,0);
+            fl_set_button(fd_form_table_options->radio_lt_firsthead, 0);
+            fl_set_button(fd_form_table_options->radio_lt_head, 0);
+            fl_set_button(fd_form_table_options->radio_lt_foot, 0);
+            fl_set_button(fd_form_table_options->radio_lt_lastfoot, 0);
+            fl_set_button(fd_form_table_options->radio_lt_newpage, 0);
            fl_set_object_lcol(fd_form_table_options->radio_lt_firsthead,
                               FL_INACTIVE);
            fl_set_object_lcol(fd_form_table_options->radio_lt_head,
@@ -217,7 +214,9 @@ bool UpdateLayoutTable(int flag)
                      table->RotateTable());
        fl_set_focus_object(fd_form_table_options->form_table_options,
                            fd_form_table_options->button_table_delete);
-    } else if (fd_form_table_options->form_table_options->visible) {
+    } else
+#endif
+           if (fd_form_table_options->form_table_options->visible) {
        fl_set_focus_object(fd_form_table_options->form_table_options,
                            fd_form_table_options->button_table_delete);
         fl_hide_form(fd_form_table_options->form_table_options);
@@ -225,15 +224,24 @@ bool UpdateLayoutTable(int flag)
     return update;
 }
 
+
 void OpenLayoutTableExtra()
 {
-    if (fd_form_table_extra->form_table_extra->visible) {
-        fl_raise_form(fd_form_table_extra->form_table_extra);
-    } else {
-        fl_show_form(fd_form_table_extra->form_table_extra,
-                     FL_PLACE_MOUSE | FL_FREE_SIZE,FL_FULLBORDER,
-                     _("Table Extra Form"));
-    }
+
+       if (fd_form_table_extra->form_table_extra->visible) {
+               fl_raise_form(fd_form_table_extra->form_table_extra);
+       } else {
+               static int ow = -1, oh;
+               fl_show_form(fd_form_table_extra->form_table_extra,
+                            FL_PLACE_MOUSE | FL_FREE_SIZE, FL_FULLBORDER,
+                            _("Table Extra Form"));
+               if (ow < 0) {
+                       ow = fd_form_table_extra->form_table_extra->w;
+                       oh = fd_form_table_extra->form_table_extra->h;
+               }
+               fl_set_form_minsize(fd_form_table_extra->form_table_extra,
+                                   ow, oh);
+       }
 }
 
 void MenuLayoutTable(int flag)
@@ -244,52 +252,47 @@ void MenuLayoutTable(int flag)
         }
         else {
             fl_show_form(fd_form_table_options->form_table_options,
-                         FL_PLACE_MOUSE | FL_FREE_SIZE,FL_FULLBORDER,
+                         FL_PLACE_MOUSEFL_FULLBORDER,
                          _("Table Layout"));
         }
     }
 }
 
-void TableOptionsCB(FL_OBJECT *ob, long)
+
+void TableOptionsCB(FL_OBJECT * ob, long)
 {
-    LyXTable
-        *table = 0;
-    int
-        cell,
-        s,
-        num = 0;
-    string
-        special,
-        str;
+#ifndef NEW_TABULAR
+    LyXTable * table = 0;
+    int s, num = 0;
+    string special, str;
 
     if (!current_view->available()
-       ||
-       !(table = current_view->currentBuffer()->text->cursor.par->table)) 
-      {
+       || !(table = current_view->text->cursor.par()->table)) {
         MenuLayoutTable(0);
        return;
       }
-    cell = current_view->currentBuffer()->text->
-        NumberOfCell(current_view->currentBuffer()->text->cursor.par
-                     current_view->currentBuffer()->text->cursor.pos);
+    int cell = current_view->text->
+        NumberOfCell(current_view->text->cursor.par()
+                     current_view->text->cursor.pos());
     if (ActCell != cell) {
         MenuLayoutTable(0);
         fl_set_object_label(fd_form_table_options->text_warning,
                             _("Warning: Wrong Cursor position, updated window"));
         fl_show_object(fd_form_table_options->text_warning);
-       extra_col_cursor_x=0; // would rather place it at the end, but...
-       extra_multicol_cursor_x=0;
+       extra_col_cursor_x = 0; // would rather place it at the end, but...
+       extra_multicol_cursor_x = 0;
         return;
     }
+
     // No point in processing directives that you can't do anything with
     // anyhow, so exit now if the buffer is read-only.
-    if (current_view->currentBuffer()->isReadonly()) {
+    if (current_view->buffer()->isReadonly()) {
       MenuLayoutTable(0);
       return;
     }
     
     if (ob != fd_form_table_options->button_table_delete) {
-        fl_set_object_label(fd_form_table_options->text_warning,"");
+        fl_set_object_label(fd_form_table_options->text_warning, "");
         Confirmed = false;
     }
     str = fl_get_input(fd_form_table_options->input_column_width);
@@ -299,8 +302,8 @@ void TableOptionsCB(FL_OBJECT *ob, long)
         fl_show_object(fd_form_table_options->text_warning);
         return;
     }
-    if (((ob==fd_form_table_options->button_delete_row) && (table->rows<=1)) ||
-        ((ob==fd_form_table_options->button_delete_column) && (table->columns<=1)))
+    if (((ob == fd_form_table_options->button_delete_row) && (table->rows<= 1)) ||
+        ((ob == fd_form_table_options->button_delete_column) && (table->columns<= 1)))
         ob = fd_form_table_options->button_table_delete;
     if (ob == fd_form_table_options->button_append_row)
         num = LyXTable::APPEND_ROW;
@@ -328,7 +331,7 @@ void TableOptionsCB(FL_OBJECT *ob, long)
         num = LyXTable::ALIGN_RIGHT;
     else if (ob == fd_form_table_options->radio_align_center)
         num = LyXTable::ALIGN_CENTER;
-    else if ((ob==fd_form_table_options->button_table_delete) && !Confirmed) {
+    else if ((ob == fd_form_table_options->button_table_delete) && !Confirmed) {
         fl_set_object_label(fd_form_table_options->text_warning,
                             _("Confirm: press Delete-Button again"));
         Confirmed = true;
@@ -340,7 +343,7 @@ void TableOptionsCB(FL_OBJECT *ob, long)
     } else if (ob == fd_form_table_options->radio_multicolumn)
         num = LyXTable::MULTICOLUMN;
     else if (ob == fd_form_table_options->radio_longtable) {
-        s=fl_get_button(fd_form_table_options->radio_longtable);
+        s = fl_get_button(fd_form_table_options->radio_longtable);
         if (s) {
             num = LyXTable::SET_LONGTABLE;
             fl_activate_object(fd_form_table_options->radio_lt_firsthead);
@@ -365,11 +368,11 @@ void TableOptionsCB(FL_OBJECT *ob, long)
             fl_deactivate_object(fd_form_table_options->radio_lt_foot);
             fl_deactivate_object(fd_form_table_options->radio_lt_lastfoot);
             fl_deactivate_object(fd_form_table_options->radio_lt_newpage);
-            fl_set_button(fd_form_table_options->radio_lt_firsthead,0);
-            fl_set_button(fd_form_table_options->radio_lt_firsthead,0);
-            fl_set_button(fd_form_table_options->radio_lt_firsthead,0);
-            fl_set_button(fd_form_table_options->radio_lt_firsthead,0);
-            fl_set_button(fd_form_table_options->radio_lt_firsthead,0);
+            fl_set_button(fd_form_table_options->radio_lt_firsthead, 0);
+            fl_set_button(fd_form_table_options->radio_lt_firsthead, 0);
+            fl_set_button(fd_form_table_options->radio_lt_firsthead, 0);
+            fl_set_button(fd_form_table_options->radio_lt_firsthead, 0);
+            fl_set_button(fd_form_table_options->radio_lt_firsthead, 0);
            fl_set_object_lcol(fd_form_table_options->radio_lt_firsthead,
                               FL_INACTIVE);
            fl_set_object_lcol(fd_form_table_options->radio_lt_head,
@@ -382,13 +385,13 @@ void TableOptionsCB(FL_OBJECT *ob, long)
                               FL_INACTIVE);
         }
     } else if (ob == fd_form_table_options->radio_rotate_table) {
-        s=fl_get_button(fd_form_table_options->radio_rotate_table);
+        s = fl_get_button(fd_form_table_options->radio_rotate_table);
        if (s)
             num = LyXTable::SET_ROTATE_TABLE;
        else
            num = LyXTable::UNSET_ROTATE_TABLE;
     } else if (ob == fd_form_table_options->radio_rotate_cell) {
-        s=fl_get_button(fd_form_table_options->radio_rotate_cell);
+        s = fl_get_button(fd_form_table_options->radio_rotate_cell);
        if (s)
             num = LyXTable::SET_ROTATE_CELL;
        else
@@ -409,29 +412,29 @@ void TableOptionsCB(FL_OBJECT *ob, long)
         OpenLayoutTableExtra();
         return;
     } else if (ob == fd_form_table_extra->input_special_alignment) {
-        special=fl_get_input(fd_form_table_extra->input_special_alignment);
+        special = fl_get_input(fd_form_table_extra->input_special_alignment);
        int dummy;
        fl_get_input_cursorpos(ob, &extra_col_cursor_x, &dummy);
         num = LyXTable::SET_SPECIAL_COLUMN;
     } else if (ob == fd_form_table_extra->input_special_multialign) {
-        special=fl_get_input(fd_form_table_extra->input_special_multialign);
+        special = fl_get_input(fd_form_table_extra->input_special_multialign);
        int dummy;
        fl_get_input_cursorpos(ob, &extra_multicol_cursor_x, &dummy);
         num = LyXTable::SET_SPECIAL_MULTI;
     } else
         return;
-    if (current_view->available()){
-        current_view->getScreen()->HideCursor();
-        if (!current_view->currentBuffer()->text->selection){
-            BeforeChange(); 
-            current_view->currentBuffer()->update(-2);
+    if (current_view->available()) {
+        current_view->hideCursor();
+        if (!current_view->text->selection){
+            current_view->beforeChange();
+            current_view->update(BufferView::SELECT|BufferView::FITCUR);
         }
         if ((num == LyXTable::SET_SPECIAL_COLUMN) ||
             (num == LyXTable::SET_SPECIAL_MULTI))
-            current_view->currentBuffer()->text->TableFeatures(num,special);
+            current_view->text->TableFeatures(current_view, num, special);
         else
-            current_view->currentBuffer()->text->TableFeatures(num);
-        current_view->currentBuffer()->update(1);
+            current_view->text->TableFeatures(current_view, num);
+        current_view->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
     }
     if (num == LyXTable::DELETE_TABLE) {
        fl_set_focus_object(fd_form_table_options->form_table_options,
@@ -440,8 +443,10 @@ void TableOptionsCB(FL_OBJECT *ob, long)
     } else
         UpdateLayoutTable(true);
     return;
+#endif
 }
 
+
 void TableOptCloseCB(FL_OBJECT *, long)
 {
     fl_set_focus_object(fd_form_table_options->form_table_options,
@@ -458,29 +463,29 @@ void TableSpeCloseCB(FL_OBJECT *, long)
     return;
 }
 
-void SetPWidthCB(FL_OBJECT *ob, long)
+void SetPWidthCB(FL_OBJECT * ob, long)
 {
-    fl_set_object_label(fd_form_table_options->text_warning,"");
+#ifndef NEW_TABULAR
+    fl_set_object_label(fd_form_table_options->text_warning, "");
     Confirmed = false;
     if (ob == fd_form_table_options->input_column_width) {
-        string
-            str;
-        str = fl_get_input(ob);
+        string str = fl_get_input(ob);
         if (!str.empty() && !isValidLength(str)) {
             fl_set_object_label(fd_form_table_options->text_warning,
-                            _("Warning: Invalid Length (valid example: 10mm)"));
+                           _("Warning: Invalid Length (valid example: 10mm)"));
             fl_show_object(fd_form_table_options->text_warning);
             return;
         }
         if (current_view->available()){
-            current_view->getScreen()->HideCursor();
-            if (!current_view->currentBuffer()->text->selection){
-                BeforeChange(); 
-                current_view->currentBuffer()->update(-2);
+            current_view->hideCursor();
+            if (!current_view->text->selection) {
+                current_view->beforeChange(); 
+                current_view->update(BufferView::SELECT|BufferView::FITCUR);
             }
-            current_view->currentBuffer()->text->TableFeatures(LyXTable::SET_PWIDTH,str);
-            current_view->currentBuffer()->update(1);
+            current_view->text->TableFeatures(current_view, LyXTable::SET_PWIDTH, str);
+            current_view->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
         }
         MenuLayoutTable(0); // update for alignment
     }
+#endif
 }