]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt2/QParagraphDialog.C
better selection and scrolling behaviour
[lyx.git] / src / frontends / qt2 / QParagraphDialog.C
index 2a6d327bf1d80a4773d9cc028c994445a5ccb72f..6aaa7d5582bd123be6d758b2be98770aa1056146 100644 (file)
 /**
  * \file QParagraphDialog.C
- * Copyright 2001 LyX Team
- * see the file COPYING
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
  *
- * \author John Levon, moz@compsoc.man.ac.uk
- * \author Edwin Leuven, leuven@fee.uva.nl
+ * \author John Levon
+ * \author Edwin Leuven
+ *
+ * Full author contact details are available in file CREDITS
  */
 
 #include <config.h>
-#include <gettext.h>
-#include <string>
+
+#ifdef __GNUG__
+#pragma implementation
+#endif
 
 #include "QParagraphDialog.h"
 #include "QParagraph.h"
-#include "support/lstrings.h"
-#include "debug.h"
 
 #include <qlineedit.h>
 #include <qcombobox.h>
-#include <qcheckbox.h>
 #include <qpushbutton.h>
-#include <qtabwidget.h>
-#include <qlabel.h>
-#include <qgroupbox.h>
-
-using std::endl;
-
-QParagraphDialog::QParagraphDialog(QParagraph * form, QWidget * parent,
-                                  char const * name, bool modal, WFlags fl)
-       : QParagraphDialogBase(parent, name, modal, fl),
-         form_(form)
-{
-       setCaption(name);
-}
-
-
-QParagraphDialog::~QParagraphDialog()
-{
-}
-
-
-void QParagraphDialog::setReadOnly(bool readonly)
-{
-       TabsParagraph->setEnabled(!readonly);
-       okPB->setEnabled(!readonly);
-       applyPB->setEnabled(!readonly);
-       defaultsPB->setEnabled(!readonly);
-       cancelPB->setText(readonly ? _("&Close") : _("&Cancel"));
-}
-
-
-void QParagraphDialog::setLabelWidth(char const * text)
-{
-       // FIXME: should be cleverer here
-       if (!strcmp(_("Senseless with this layout!"),text)) {
-               listOptions->setEnabled(false);
-               labelWidth->setText("");
-       } else {
-               listOptions->setEnabled(true);
-               labelWidth->setText(text);
-       }
-}
-
-
-void QParagraphDialog::setAlign(int type)
-{
-       int item = 0;
-       switch (type) {
-               case LYX_ALIGN_BLOCK: item = 0; break;
-               case LYX_ALIGN_LEFT: item = 1; break;
-               case LYX_ALIGN_RIGHT: item = 2; break;
-               case LYX_ALIGN_CENTER: item = 3; break;
-               default:
-                       item = 0;
-                       break;
-       }
-       alignment->setCurrentItem(item);
-}
+#include <qvalidator.h>
 
+#include "helper_funcs.h"
 
-void QParagraphDialog::setChecks(bool labove, bool lbelow, bool pabove,
-                                bool pbelow, bool noindent)
-{
-       lineAbove->setChecked(labove);
-       lineBelow->setChecked(lbelow);
-       pagebreakAbove->setChecked(pabove);
-       pagebreakBelow->setChecked(pbelow);
-       noIndent->setChecked(noindent);
-}
+using std::vector;
 
 
-void QParagraphDialog::setSpace(VSpace::vspace_kind kindabove,
-                               VSpace::vspace_kind kindbelow,
-                               bool keepabove, bool keepbelow)
+QParagraphDialog::QParagraphDialog(QParagraph * form)
+       : QParagraphDialogBase(0, 0, false, 0),
+       form_(form)
 {
-       int item = 0;
+       connect(okPB, SIGNAL(clicked()),
+               form_, SLOT(slotOK()));
+       connect(applyPB, SIGNAL(clicked()),
+               form_, SLOT(slotApply()));
+       connect(closePB, SIGNAL(clicked()),
+               form_, SLOT(slotClose()));
 
-       switch (kindabove) {
-               case VSpace::NONE: item = 0; break;
-               case VSpace::DEFSKIP: item = 1; break;
-               case VSpace::SMALLSKIP: item = 2; break;
-               case VSpace::MEDSKIP: item = 3; break;
-               case VSpace::BIGSKIP: item = 4; break;
-               case VSpace::VFILL: item = 5; break;
-               case VSpace::LENGTH: item = 6; break;
-       }
-       spacingAbove->setCurrentItem(item);
 
-       switch (kindbelow) {
-               case VSpace::NONE: item = 0; break;
-               case VSpace::DEFSKIP: item = 1; break;
-               case VSpace::SMALLSKIP: item = 2; break;
-               case VSpace::MEDSKIP: item = 3; break;
-               case VSpace::BIGSKIP: item = 4; break;
-               case VSpace::VFILL: item = 5; break;
-               case VSpace::LENGTH: item = 6; break;
-       }
-       spacingBelow->setCurrentItem(item);
-
-       spacingAboveValue->setEnabled(kindabove == VSpace::LENGTH);
-       spacingAbovePlus->setEnabled(kindabove == VSpace::LENGTH);
-       spacingAboveMinus->setEnabled(kindabove == VSpace::LENGTH);
-       spacingBelowValue->setEnabled(kindbelow == VSpace::LENGTH);
-       spacingBelowPlus->setEnabled(kindbelow == VSpace::LENGTH);
-       spacingBelowMinus->setEnabled(kindbelow == VSpace::LENGTH);
-
-       spacingAboveKeep->setChecked(keepabove);
-       spacingBelowKeep->setChecked(keepbelow);
-}
-
-
-void QParagraphDialog::setAboveLength(float val, float plus, float minus,
-                                     LyXLength::UNIT vunit,
-                                     LyXLength::UNIT punit,
-                                     LyXLength::UNIT munit)
-{
-       if (vunit == LyXLength::UNIT_NONE) {
-               spacingAboveValue->setText("");
-               spacingAbovePlus->setText("");
-               spacingAboveMinus->setText("");
-       } else {
-               spacingAboveValue->setText(tostr(val).c_str());
-               spacingAbovePlus->setText(tostr(plus).c_str());
-               spacingAboveMinus->setText(tostr(minus).c_str());
-       }
-
-       spacingAboveValueUnit->setCurrentItem(getItem(vunit));
-       spacingAbovePlusUnit->setCurrentItem(getItem(punit));
-       spacingAboveMinusUnit->setCurrentItem(getItem(munit));
-
-}
-
-
-void QParagraphDialog::setBelowLength(float val, float plus, float minus,
-                                     LyXLength::UNIT vunit,
-                                     LyXLength::UNIT punit,
-                                     LyXLength::UNIT munit)
-{
-       if (vunit == LyXLength::UNIT_NONE) {
-               spacingBelowValue->setText("");
-               spacingBelowPlus->setText("");
-               spacingBelowMinus->setText("");
-       } else {
-               spacingBelowValue->setText(tostr(val).c_str());
-               spacingBelowPlus->setText(tostr(plus).c_str());
-               spacingBelowMinus->setText(tostr(minus).c_str());
-       }
-
-       spacingBelowValueUnit->setCurrentItem(getItem(vunit));
-       spacingBelowPlusUnit->setCurrentItem(getItem(punit));
-       spacingBelowMinusUnit->setCurrentItem(getItem(munit));
-}
-
-
-void QParagraphDialog::setExtra(float widthval, LyXLength::UNIT units,
-                               string const & percent, int align,
-                               bool hfill, bool startminipage,
-                               Paragraph::PEXTRA_TYPE type)
-{
-       if (type != Paragraph::PEXTRA_NONE) {
-               lyxerr[Debug::GUI] << "percent : $" << percent << "$ widthval "
-                                  << widthval << " unit " << long(units)
-                                  << endl;
-               if (percent != "") {
-                       extraWidth->setText(percent.c_str());
-                       extraUnit->setCurrentItem(11);
-               } else {
-                       extraWidth->setText(tostr(widthval).c_str());
-                       extraUnit->setCurrentItem(getItem(units));
-               }
-       } else
-               extraWidth->setText("");
-
-       switch (type) {
-               case Paragraph::PEXTRA_NONE:
-                       extraType->setCurrentItem(0);
-                       break;
-               case Paragraph::PEXTRA_MINIPAGE:
-                       extraType->setCurrentItem(1);
-                       enable_extraOptions(1);
-                       enable_minipageOptions(1);
-                       break;
-               case Paragraph::PEXTRA_FLOATFLT:
-                       extraType->setCurrentItem(2);
-                       enable_extraOptions(2);
-                       break;
-               case Paragraph::PEXTRA_INDENT:
-                       extraType->setCurrentItem(3);
-                       enable_extraOptions(3);
-                       break;
-       }
-
-       switch (align) {
-               case Paragraph::MINIPAGE_ALIGN_TOP:
-                       minipageValign->setCurrentItem(0);
-                       break;
-               case Paragraph::MINIPAGE_ALIGN_MIDDLE:
-                       minipageValign->setCurrentItem(1);
-                       break;
-               case Paragraph::MINIPAGE_ALIGN_BOTTOM:
-                       minipageValign->setCurrentItem(2);
-                       break;
-       }
-
-       minipageHfill->setChecked(hfill);
-       minipageStart->setChecked(startminipage);
-}
-
-
-LyXGlueLength QParagraphDialog::getAboveLength() const
-{
-       LyXGlueLength len(
-               LyXLength(spacingAboveValue->text().toFloat(),
-               getLyXLength(spacingAboveValueUnit->currentItem())),
-               LyXLength(spacingAbovePlus->text().toFloat(),
-               getLyXLength(spacingAbovePlusUnit->currentItem())),
-               LyXLength(spacingAboveMinus->text().toFloat(),
-               getLyXLength(spacingAboveMinusUnit->currentItem()))
-               );
-       return len;
-}
-
-
-LyXGlueLength QParagraphDialog::getBelowLength() const
-{
-       LyXGlueLength len(
-               LyXLength(spacingBelowValue->text().toFloat(),
-               getLyXLength(spacingBelowValueUnit->currentItem())),
-               LyXLength(spacingBelowPlus->text().toFloat(),
-               getLyXLength(spacingBelowPlusUnit->currentItem())),
-               LyXLength(spacingBelowMinus->text().toFloat(),
-               getLyXLength(spacingBelowMinusUnit->currentItem()))
-               );
-       return len;
-}
-
-
-LyXLength QParagraphDialog::getExtraWidth() const
-{
-       if (extraUnit->currentItem() != 11) {
-               LyXLength len(
-                        (extraWidth->text()).toDouble(),
-                        getLyXLength(extraUnit->currentItem())
-                        );
-               return len;
-       } else {
-               LyXLength len(0.0, LyXLength::UNIT_NONE);
-               return len;
-       }
-}
-
-
-string QParagraphDialog::getExtraWidthPercent() const
-{
-       double val = (extraWidth->text()).toDouble();
-       if (val > 100.0)
-               val = 100.0;
-       if (val < 0.0)
-               val = 0.0;
-       return tostr(val);
-}
-
-
-char const * QParagraphDialog::getLabelWidth() const
-{
-       return labelWidth->text();
-}
-
-
-LyXAlignment QParagraphDialog::getAlign() const
-{
-       switch (alignment->currentItem()) {
-               case 0: return LYX_ALIGN_BLOCK;
-               case 1: return LYX_ALIGN_LEFT;
-               case 2: return LYX_ALIGN_RIGHT;
-               case 3: return LYX_ALIGN_CENTER;
-               default: return LYX_ALIGN_CENTER;
-       }
-}
-
-
-bool QParagraphDialog::getAboveKeep() const
-{
-       return spacingAboveKeep->isChecked();
-}
-
-
-bool QParagraphDialog::getBelowKeep() const
-{
-       return spacingBelowKeep->isChecked();
-}
-
-
-bool QParagraphDialog::getLineAbove() const
-{
-       return lineAbove->isChecked();
-}
-
-
-bool QParagraphDialog::getLineBelow() const
-{
-       return lineBelow->isChecked();
-}
-
-
-bool QParagraphDialog::getPagebreakAbove() const
-{
-       return pagebreakAbove->isChecked();
-}
-
-
-bool QParagraphDialog::getPagebreakBelow() const
-{
-       return pagebreakBelow->isChecked();
-}
-
-
-bool QParagraphDialog::getNoIndent() const
-{
-       return noIndent->isChecked();
-}
-
-
-VSpace::vspace_kind QParagraphDialog::getSpaceAboveKind() const
-{
-       return getSpaceKind(spacingAbove->currentItem());
-}
-
-
-VSpace::vspace_kind QParagraphDialog::getSpaceBelowKind() const
-{
-       return getSpaceKind(spacingBelow->currentItem());
-}
-
-
-Paragraph::PEXTRA_TYPE QParagraphDialog::getExtraType() const
-{
-       switch (extraType->currentItem()) {
-               case 0: return Paragraph::PEXTRA_NONE;
-               case 1: return Paragraph::PEXTRA_MINIPAGE;
-               case 2: return Paragraph::PEXTRA_FLOATFLT;
-               case 3: return Paragraph::PEXTRA_INDENT;
-       }
-       return Paragraph::PEXTRA_NONE;
-}
-
-
-Paragraph::MINIPAGE_ALIGNMENT QParagraphDialog::getExtraAlign() const
-{
-       switch (minipageValign->currentItem()) {
-               case 0: return Paragraph::MINIPAGE_ALIGN_TOP;
-               case 1: return Paragraph::MINIPAGE_ALIGN_MIDDLE;
-               case 2: return Paragraph::MINIPAGE_ALIGN_BOTTOM;
-               default: return Paragraph::MINIPAGE_ALIGN_BOTTOM;
-       }
-}
-
-
-bool QParagraphDialog::getHfillBetween() const
-{
-       return minipageHfill->isChecked();
-}
-
-
-bool QParagraphDialog::getStartNewMinipage() const
-{
-       return minipageStart->isChecked();
-}
-
-
-VSpace::vspace_kind QParagraphDialog::getSpaceKind(int val) const
-{
-       switch (val) {
-               case 0: return VSpace::NONE;
-               case 1: return VSpace::DEFSKIP;
-               case 2: return VSpace::SMALLSKIP;
-               case 3: return VSpace::MEDSKIP;
-               case 4: return VSpace::BIGSKIP;
-               case 5: return VSpace::VFILL;
-               case 6: return VSpace::LENGTH;
-               default:
-                       lyxerr[Debug::GUI] << "Unknown kind combo entry "
-                                          << val << std::endl;
-               }
-       return VSpace::NONE;
-}
-
-
-LyXLength::UNIT QParagraphDialog::getLyXLength(int val) const
-{
-       switch (val) {
-               case 0: return LyXLength::CM;
-               case 1: return LyXLength::IN;
-               case 2: return LyXLength::PT;
-               case 3: return LyXLength::MM;
-               case 4: return LyXLength::PC;
-               case 5: return LyXLength::EX;
-               case 6: return LyXLength::EM;
-               case 7: return LyXLength::SP;
-               case 8: return LyXLength::BP;
-               case 9: return LyXLength::DD;
-               case 10: return LyXLength::CC;
-               default:
-                       lyxerr[Debug::GUI] << "Unknown kind combo entry "
-                                          << val << std::endl;
-       }
-       return LyXLength::UNIT_NONE;
-}
-
-
-int QParagraphDialog::getItem(LyXLength::UNIT unit) const
-{
-       int item = 0;
-       switch (unit) {
-               case LyXLength::CM: item = 0; break;
-               case LyXLength::IN: item = 1; break;
-               case LyXLength::PT: item = 2; break;
-               case LyXLength::MM: item = 3; break;
-               case LyXLength::PC: item = 4; break;
-               case LyXLength::EX: item = 5; break;
-               case LyXLength::EM: item = 6; break;
-               case LyXLength::SP: item = 7; break;
-               case LyXLength::BP: item = 8; break;
-               case LyXLength::DD: item = 9; break;
-               case LyXLength::CC: item = 10; break;
-               case LyXLength::MU: item = 0; break;
-               case LyXLength::UNIT_NONE: item = 0; break;
-               default:
-                       lyxerr[Debug::GUI] << "Unknown unit " << long(unit)
-                                          << endl;
-       }
-       return item;
-}
-
-
-void QParagraphDialog::enable_extraOptions(int item)
-{
-       bool const enable = (item != 0);
-       extraWidth->setEnabled(enable);
-       extraWidthL->setEnabled(enable);
-       extraUnit->setEnabled(enable);
-       extraUnitL->setEnabled(enable);
-}
-
-
-void QParagraphDialog::enable_minipageOptions(int item)
-{
-       minipageOptions->setEnabled( item == 1 );
-}
-
-
-void QParagraphDialog::enable_spacingAbove(int item)
-{
-       bool const enable = (item == 6);
-       spacingAboveValue->setEnabled(enable);
-       spacingAbovePlus->setEnabled(enable);
-       spacingAboveMinus->setEnabled(enable);
-       spacingAboveValueUnit->setEnabled(enable);
-       spacingAbovePlusUnit->setEnabled(enable);
-       spacingAboveMinusUnit->setEnabled(enable);
-       spacingAboveUnitsL->setEnabled(enable);
-       bool const enablel = ( (item == 6) || (item != 6 && spacingBelow->currentItem() == 6) );
-       spacingValueL->setEnabled(enablel);
-       spacingPlusL->setEnabled(enablel);
-       spacingMinusL->setEnabled(enablel);
-}
-
-
-void QParagraphDialog::enable_spacingBelow(int item)
-{
-       bool const enable = (item == 6);
-       spacingBelowValue->setEnabled(enable);
-       spacingBelowPlus->setEnabled(enable);
-       spacingBelowMinus->setEnabled(enable);
-       spacingBelowValueUnit->setEnabled(enable);
-       spacingBelowPlusUnit->setEnabled(enable);
-       spacingBelowMinusUnit->setEnabled(enable);
-       spacingBelowUnitsL->setEnabled(enable);
-       bool const enablel = ( (item == 6) || (item!=6 && spacingAbove->currentItem() == 6) );
-       spacingValueL->setEnabled(enablel);
-       spacingPlusL->setEnabled(enablel);
-       spacingMinusL->setEnabled(enablel);
+       linespacingValue->setValidator(new QDoubleValidator(linespacingValue));
+       // disabled to allow glue spacing for latexperts
+       //valueAbove->setValidator(new QDoubleValidator(valueAbove));
+       //valueBelow->setValidator(new QDoubleValidator(valueBelow));
 }
 
 
 void QParagraphDialog::closeEvent(QCloseEvent * e)
 {
-       form_->close();
+       form_->slotWMHide();
        e->accept();
 }
 
 
-void QParagraphDialog::apply_adaptor()
+void QParagraphDialog::change_adaptor()
 {
-       form_->apply();
+       form_->changed();
 }
 
 
-void QParagraphDialog::cancel_adaptor()
+void QParagraphDialog::enableAbove(int)
 {
-       form_->close();
-       hide();
+       bool const enable = spacingAbove->currentItem()==6;
+       valueAbove->setEnabled(enable);
+       unitAbove->setEnabled(enable);
+
 }
 
 
-void QParagraphDialog::ok_adaptor()
+void QParagraphDialog::enableBelow(int)
 {
-       apply_adaptor();
-       form_->close();
-       hide();
+       bool const enable = spacingBelow->currentItem()==6;
+       valueBelow->setEnabled(enable);
+       unitBelow->setEnabled(enable);
 }
 
 
-void QParagraphDialog::restore_adaptor()
+void QParagraphDialog::enableLinespacingValue(int)
 {
-       form_->update();
+       bool const enable = linespacing->currentItem()==4;
+       linespacingValue->setEnabled(enable);
 }