]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt2/QTabularDialog.C
better selection and scrolling behaviour
[lyx.git] / src / frontends / qt2 / QTabularDialog.C
index 401a21dfbaf842789a3f51ad08db05696cc78a53..1ec562904bce8745b0801608300d77b6d7ec0b87 100644 (file)
@@ -4,6 +4,8 @@
  * Licence details can be found in the file COPYING.
  *
  * \author John Levon
+ * \author Juergen Spitzmueller
+ * \author Herbert Voss
  *
  * Full author contact details are available in file CREDITS
  */
 #pragma implementation
 #endif
 
-#include "gettext.h"
+#include "ControlTabular.h"
 
 #include "QTabular.h"
 #include "QTabularDialog.h"
+#include "tabular.h"
+#include "lengthcombo.h"
+#include "qsetborder.h"
 
+#include <qcheckbox.h>
 #include <qpushbutton.h>
+#include <qlineedit.h>
 
 
 QTabularDialog::QTabularDialog(QTabular * form)
@@ -42,3 +49,410 @@ void QTabularDialog::closeEvent(QCloseEvent * e)
        form_->slotWMHide();
        e->accept();
 }
+
+void QTabularDialog::close_clicked()
+{
+       form_->closeGUI();
+}
+
+void QTabularDialog::columnAppend_clicked()
+{
+       form_->controller().set(LyXTabular::APPEND_COLUMN);
+}
+
+
+void QTabularDialog::rowAppend_clicked()
+{
+       form_->controller().set(LyXTabular::APPEND_ROW);
+}
+
+
+void QTabularDialog::columnDelete_clicked()
+{
+       form_->controller().set(LyXTabular::DELETE_COLUMN);
+}
+
+
+void QTabularDialog::rowDelete_clicked()
+{
+       form_->controller().set(LyXTabular::DELETE_ROW);
+}
+
+
+void QTabularDialog::borderSet_clicked()
+{
+       form_->controller().set(LyXTabular::SET_ALL_LINES);
+       form_->update_borders();
+       form_->changed();
+}
+
+void QTabularDialog::borderUnset_clicked()
+{
+       form_->controller().set(LyXTabular::UNSET_ALL_LINES);
+       form_->update_borders();
+       form_->changed();
+}
+
+
+void QTabularDialog::leftBorder_changed()
+{
+       if (form_->controller().isMulticolumnCell())
+               form_->controller().set(LyXTabular::M_TOGGLE_LINE_LEFT);
+       else
+               form_->controller().set(LyXTabular::TOGGLE_LINE_LEFT);
+       form_->changed();
+}
+
+
+void QTabularDialog::rightBorder_changed()
+{
+       if (form_->controller().isMulticolumnCell())
+               form_->controller().set(LyXTabular::M_TOGGLE_LINE_RIGHT);
+       else
+               form_->controller().set(LyXTabular::TOGGLE_LINE_RIGHT);
+       form_->changed();
+}
+
+
+void QTabularDialog::topBorder_changed()
+{
+       if (form_->controller().isMulticolumnCell())
+               form_->controller().set(LyXTabular::M_TOGGLE_LINE_TOP);
+       else
+               form_->controller().set(LyXTabular::TOGGLE_LINE_TOP);
+       form_->changed();
+}
+
+
+void QTabularDialog::bottomBorder_changed()
+{
+       if (form_->controller().isMulticolumnCell())
+               form_->controller().set(LyXTabular::M_TOGGLE_LINE_BOTTOM);
+       else
+               form_->controller().set(LyXTabular::TOGGLE_LINE_BOTTOM);
+       form_->changed();
+}
+
+
+void QTabularDialog::specialAlignment_changed()
+{
+       string special = specialAlignmentED->text().latin1();
+       if (form_->controller().isMulticolumnCell())
+               form_->controller().set(LyXTabular::SET_SPECIAL_MULTI, special);
+       else
+               form_->controller().set(LyXTabular::SET_SPECIAL_COLUMN, special);
+}
+
+
+void QTabularDialog::width_changed()
+{
+       string const width =
+               LyXLength(widthED->text().toDouble(),
+                       widthUnit->currentLengthItem()).asString();
+       if (form_->controller().isMulticolumnCell())
+               form_->controller().set(LyXTabular::SET_MPWIDTH, width);
+       else
+               form_->controller().set(LyXTabular::SET_PWIDTH, width);
+       form_->changed();
+       form_->update_contents();
+}
+
+
+void QTabularDialog::multicolumn_clicked()
+{
+       form_->controller().set(LyXTabular::MULTICOLUMN);
+       form_->changed();
+       form_->update_contents();
+}
+
+
+void QTabularDialog::rotateTabular_checked(int state)
+{
+       switch (state) {
+       case 0:
+               form_->controller().set(LyXTabular::UNSET_ROTATE_TABULAR);
+               break;
+       case 1:
+               // "no change state", should not happen
+               break;
+       case 2:
+               form_->controller().set(LyXTabular::SET_ROTATE_TABULAR);
+               break;
+       }
+}
+
+
+void QTabularDialog::rotateCell_checked(int state)
+{
+       switch (state) {
+       case 0:
+               form_->controller().set(LyXTabular::UNSET_ROTATE_CELL);
+               break;
+       case 1:
+               // "no change state", should not happen
+               break;
+       case 2:
+               form_->controller().set(LyXTabular::SET_ROTATE_CELL);
+               break;
+       }
+}
+
+
+void QTabularDialog::hAlign_changed(int align)
+{
+       LyXTabular::Feature num = LyXTabular::ALIGN_LEFT;
+       LyXTabular::Feature multi_num = LyXTabular::M_ALIGN_LEFT;
+
+       switch (align) {
+               case 0:
+               {
+                       num = LyXTabular::ALIGN_LEFT;
+                       multi_num = LyXTabular::M_ALIGN_LEFT;
+                       break;
+               }
+               case 1:
+               {
+                       num = LyXTabular::ALIGN_CENTER;
+                       multi_num = LyXTabular::M_ALIGN_CENTER;
+                       break;
+               }
+               case 2:
+               {
+                       num = LyXTabular::ALIGN_RIGHT;
+                       multi_num = LyXTabular::M_ALIGN_RIGHT;
+                       break;
+               case 3:
+               {
+                       num = LyXTabular::ALIGN_BLOCK;
+                       //multi_num: no equivalent
+                       break;
+               }
+               }
+       }
+       if (form_->controller().isMulticolumnCell())
+               form_->controller().set(multi_num);
+       else
+               form_->controller().set(num);
+}
+
+
+void QTabularDialog::vAlign_changed(int align)
+{
+       LyXTabular::Feature num = LyXTabular::VALIGN_CENTER;
+       LyXTabular::Feature multi_num = LyXTabular::M_VALIGN_CENTER;
+
+       switch (align) {
+               case 0:
+               {
+                       num = LyXTabular::VALIGN_TOP;
+                       multi_num = LyXTabular::M_VALIGN_TOP;
+                       break;
+               }
+               case 1:
+               {
+                       num = LyXTabular::VALIGN_CENTER;
+                       multi_num = LyXTabular::M_VALIGN_CENTER;
+                       break;
+               }
+               case 2:
+               {
+                       num = LyXTabular::VALIGN_BOTTOM;
+                       multi_num = LyXTabular::M_VALIGN_BOTTOM;
+                       break;
+               }
+       }
+       if (form_->controller().isMulticolumnCell())
+               form_->controller().set(multi_num);
+       else
+               form_->controller().set(num);
+}
+
+
+void QTabularDialog::longTabular_changed(int state)
+{
+       switch (state) {
+       case 0:
+               form_->controller().set(LyXTabular::UNSET_LONGTABULAR);
+               break;
+       case 1:
+               // "no change state", should not happen
+               break;
+       case 2:
+               form_->controller().set(LyXTabular::SET_LONGTABULAR);
+               break;
+       }
+       form_->changed();
+}
+
+
+void QTabularDialog::ltNewpage_clicked()
+{
+       form_->controller().set(LyXTabular::SET_LTNEWPAGE);
+       form_->changed();
+}
+
+
+void QTabularDialog::ltHeaderStatus_clicked()
+{
+       bool enable(headerStatusCB->isChecked());
+       if (enable)
+               form_->controller().set(LyXTabular::SET_LTHEAD, "");
+       else
+               form_->controller().set(LyXTabular::UNSET_LTHEAD, "");
+       headerBorderAboveCB->setEnabled(enable);
+       headerBorderBelowCB->setEnabled(enable);
+       firstheaderNoContentsCB->setEnabled(enable);
+       form_->changed();
+}
+
+
+void QTabularDialog::ltHeaderBorderAbove_clicked()
+{
+       if (headerBorderAboveCB->isChecked())
+               form_->controller().set(LyXTabular::SET_LTHEAD, "dl_above");
+       else
+               form_->controller().set(LyXTabular::UNSET_LTHEAD, "");
+       form_->changed();
+}
+
+
+void QTabularDialog::ltHeaderBorderBelow_clicked()
+{
+       if (headerBorderBelowCB->isChecked())
+               form_->controller().set(LyXTabular::SET_LTHEAD, "dl_below");
+       else
+               form_->controller().set(LyXTabular::UNSET_LTHEAD, "");
+       form_->changed();
+}
+
+
+void QTabularDialog::ltFirstHeaderBorderAbove_clicked()
+{
+       if (firstheaderBorderAboveCB->isChecked())
+               form_->controller().set(LyXTabular::SET_LTFIRSTHEAD, "dl_above");
+       else
+               form_->controller().set(LyXTabular::UNSET_LTFIRSTHEAD, "");
+       form_->changed();
+}
+
+
+void QTabularDialog::ltFirstHeaderBorderBelow_clicked()
+{
+       if (firstheaderBorderBelowCB->isChecked())
+               form_->controller().set(LyXTabular::SET_LTFIRSTHEAD, "dl_below");
+       else
+               form_->controller().set(LyXTabular::UNSET_LTFIRSTHEAD, "");
+       form_->changed();
+}
+
+
+void QTabularDialog::ltFirstHeaderStatus_clicked()
+{
+       bool enable(firstheaderStatusCB->isChecked());
+       if (enable)
+               form_->controller().set(LyXTabular::SET_LTFIRSTHEAD, "");
+       else
+               form_->controller().set(LyXTabular::UNSET_LTFIRSTHEAD, "");
+       firstheaderBorderAboveCB->setEnabled(enable);
+       firstheaderBorderBelowCB->setEnabled(enable);
+       form_->changed();
+}
+
+
+void QTabularDialog::ltFirstHeaderEmpty_clicked()
+{
+       bool enable(firstheaderNoContentsCB->isChecked());
+       if (enable)
+               form_->controller().set(LyXTabular::SET_LTFIRSTHEAD, "empty");
+       else {
+               ltFirstHeaderBorderBelow_clicked();
+               ltFirstHeaderBorderAbove_clicked();
+       }
+       firstheaderStatusCB->setEnabled(!enable);
+       firstheaderBorderAboveCB->setEnabled(!enable);
+       firstheaderBorderBelowCB->setEnabled(!enable);
+       form_->changed();
+}
+
+
+void QTabularDialog::ltFooterStatus_clicked()
+{
+       bool enable(footerStatusCB->isChecked());
+       if (enable)
+               form_->controller().set(LyXTabular::SET_LTFOOT, "");
+       else
+               form_->controller().set(LyXTabular::UNSET_LTFOOT, "");
+       footerBorderAboveCB->setEnabled(enable);
+       footerBorderBelowCB->setEnabled(enable);
+       lastfooterNoContentsCB->setEnabled(enable);
+       form_->changed();
+}
+
+
+void QTabularDialog::ltFooterBorderAbove_clicked()
+{
+       if (footerBorderAboveCB->isChecked())
+               form_->controller().set(LyXTabular::SET_LTFOOT, "dl_above");
+       else
+               form_->controller().set(LyXTabular::UNSET_LTFOOT, "");
+       form_->changed();
+}
+
+
+void QTabularDialog::ltFooterBorderBelow_clicked()
+{
+       if (footerBorderBelowCB->isChecked())
+               form_->controller().set(LyXTabular::SET_LTFOOT, "dl_below");
+       else
+               form_->controller().set(LyXTabular::UNSET_LTFOOT, "");
+       form_->changed();
+}
+
+
+void QTabularDialog::ltLastFooterStatus_clicked()
+{
+       bool enable(lastfooterStatusCB->isChecked());
+       if (enable)
+               form_->controller().set(LyXTabular::SET_LTLASTFOOT, "");
+       else
+               form_->controller().set(LyXTabular::UNSET_LTLASTFOOT, "");
+       lastfooterBorderAboveCB->setEnabled(enable);
+       lastfooterBorderBelowCB->setEnabled(enable);
+       form_->changed();
+}
+
+
+void QTabularDialog::ltLastFooterBorderAbove_clicked()
+{
+       if (lastfooterBorderAboveCB->isChecked())
+               form_->controller().set(LyXTabular::SET_LTLASTFOOT, "dl_above");
+       else
+               form_->controller().set(LyXTabular::UNSET_LTLASTFOOT, "");
+       form_->changed();
+}
+
+
+void QTabularDialog::ltLastFooterBorderBelow_clicked()
+{
+       if (lastfooterBorderBelowCB->isChecked())
+               form_->controller().set(LyXTabular::SET_LTLASTFOOT, "dl_below");
+       else
+               form_->controller().set(LyXTabular::UNSET_LTLASTFOOT, "");
+       form_->changed();
+}
+
+
+void QTabularDialog::ltLastFooterEmpty_clicked()
+{
+       bool enable(lastfooterNoContentsCB->isChecked());
+       if (enable)
+               form_->controller().set(LyXTabular::SET_LTLASTFOOT, "empty");
+       else {
+               ltLastFooterBorderBelow_clicked();
+               ltLastFooterBorderAbove_clicked();
+       }
+       lastfooterStatusCB->setEnabled(!enable);
+       lastfooterBorderAboveCB->setEnabled(!enable);
+       lastfooterBorderBelowCB->setEnabled(!enable);
+       form_->changed();
+}