This patch addresses the usability bugs discussed in this thread: http://www.mail-archive.com/lyx-devel@lists.lyx.org/msg121160.html and largely implements Helge's suggestions. (Helge often seems to have good ideas on these things.) The main change is that the "Default" button is now a radio button like the rest, so you don't have to uncheck Default to be allowed to check something else.
The layout that happens to be the default isn't treated specially at all. The idea here is that saying, "Align this as default, whatever that is" is different from saying "Center this, come what may", even if, in the current layout, centering happens to be the default. This seems the right behavior, as the option certainly exists in LaTeX. At the moment, however, LyX itself ignores this difference: if you choose "Left", and that is the default, it's effectively the same as choosing "Default", due to a bug in Text::setParagraph(). That will be fixed at a later stage. It may involve more than should be done prior to 1.5.0, and I don't have the time right now, anyway.
As J"urgen also pointed out, trying to treat what is in fact the default alignment differently runs into problems with multi-paragraph selections, since there may be no common default in such cases. But the more compelling reason, I think, is the one just given, which was due to Helge.
OK to apply? Richard -- ================================================================== Richard G Heck, Jr Professor of Philosophy Brown University http://frege.brown.edu/heck/ ================================================================== Get my public key from http://sks.keyserver.penguin.de Hash: 0x1DE91F1E66FFBDEC Learn how to sign your email using Thunderbird and GnuPG at: http://dudu.dyn.2-h.org/nist/gpg-enigmail-howto
Index: src/frontends/qt4/QParagraph.cpp =================================================================== --- src/frontends/qt4/QParagraph.cpp (revision 18853) +++ src/frontends/qt4/QParagraph.cpp (working copy) @@ -50,7 +50,7 @@ connect(applyPB, SIGNAL(clicked()), form_, SLOT(slotApply())); connect(closePB, SIGNAL(clicked()), form_, SLOT(slotClose())); connect(restorePB, SIGNAL(clicked()), form_, SLOT(slotRestore())); - connect(alignDefaultCB, SIGNAL(clicked()), this, SLOT(change_adaptor())); + connect(alignDefaultRB, SIGNAL(clicked()), this, SLOT(change_adaptor())); connect(alignJustRB, SIGNAL(clicked()), this, SLOT(change_adaptor())); connect(alignLeftRB, SIGNAL(clicked()), this, SLOT(change_adaptor())); connect(alignRightRB, SIGNAL(clicked()), this, SLOT(change_adaptor())); @@ -77,10 +77,17 @@ " items is used." )); - radioMap[LYX_ALIGN_BLOCK] = alignJustRB; - radioMap[LYX_ALIGN_LEFT] = alignLeftRB; - radioMap[LYX_ALIGN_RIGHT] = alignRightRB; + radioMap[LYX_ALIGN_LAYOUT] = alignDefaultRB; + radioMap[LYX_ALIGN_BLOCK] = alignJustRB; + radioMap[LYX_ALIGN_LEFT] = alignLeftRB; + radioMap[LYX_ALIGN_RIGHT] = alignRightRB; radioMap[LYX_ALIGN_CENTER] = alignCenterRB; + +/* labelMap[LYX_ALIGN_LAYOUT] = "Default"; + labelMap[LYX_ALIGN_BLOCK] = "Justified"; + labelMap[LYX_ALIGN_LEFT] = "Left"; + labelMap[LYX_ALIGN_RIGHT] = "Right"; + labelMap[LYX_ALIGN_CENTER] = "Center"; */ } @@ -105,35 +112,37 @@ void QParagraphDialog::checkAlignmentRadioButtons() { - if (alignDefaultCB->isChecked()) { - QPRadioMap::const_iterator it = radioMap.begin(); - for (; it != radioMap.end(); ++it) - it->second->setDisabled(true); - } else { - LyXAlignment alignPossible = form_->controller().alignPossible(); - QPRadioMap::const_iterator it = radioMap.begin(); - for (; it != radioMap.end(); ++it) - it->second->setEnabled(it->first & alignPossible); + LyXAlignment const alignPossible = form_->controller().alignPossible(); + //LyXAlignment const defaultAlignment = form_->controller().alignDefault(); + QPRadioMap::iterator it = radioMap.begin(); + for (; it != radioMap.end(); ++it) { + LyXAlignment const align = it->first; + it->second->setEnabled((align & alignPossible) || + (align == LYX_ALIGN_LAYOUT)); +/* string label = labelMap[align]; + if (align == LYX_ALIGN_LAYOUT) + label += "()" + labelMap[defaultAlignment] + ")"; + it->second->setText(qt_(label));*/ } } -void QParagraphDialog::on_alignDefaultCB_toggled(bool) -{ - checkAlignmentRadioButtons(); - alignmentToRadioButtons(); -} - - void QParagraphDialog::alignmentToRadioButtons(LyXAlignment align) { - if (align == LYX_ALIGN_LAYOUT) - align = form_->controller().alignDefault(); + LyXAlignment const defaultAlignment = form_->controller().alignDefault(); + if (align == LYX_ALIGN_LAYOUT || align == defaultAlignment) { + alignDefaultRB->blockSignals(true); + alignDefaultRB->setChecked(true); + alignDefaultRB->blockSignals(false); + return; + } QPRadioMap::const_iterator it = radioMap.begin(); for (;it != radioMap.end(); ++it) { if (align == it->first) { + it->second->blockSignals(true); it->second->setChecked(true); + it->second->blockSignals(false); return; } } @@ -145,8 +154,6 @@ LyXAlignment QParagraphDialog::getAlignmentFromDialog() { - if (alignDefaultCB->isChecked()) - return LYX_ALIGN_LAYOUT; LyXAlignment alignment = LYX_ALIGN_NONE; QPRadioMap::const_iterator it = radioMap.begin(); for (; it != radioMap.end(); ++it) { @@ -155,8 +162,6 @@ break; } } - if (alignment == form_->controller().alignDefault()) - return LYX_ALIGN_LAYOUT; return alignment; } @@ -243,15 +248,8 @@ } // alignment - LyXAlignment newAlignment = params.align(); - LyXAlignment defaultAlignment = controller().alignDefault(); - bool alignmentIsDefault = - newAlignment == LYX_ALIGN_LAYOUT || newAlignment == defaultAlignment; - dialog_->alignDefaultCB->blockSignals(true); - dialog_->alignDefaultCB->setChecked(alignmentIsDefault); - dialog_->alignDefaultCB->blockSignals(false); dialog_->checkAlignmentRadioButtons(); - dialog_->alignmentToRadioButtons(newAlignment); + dialog_->alignmentToRadioButtons(params.align()); //indentation bool const canindent = controller().canIndent(); Index: src/frontends/qt4/QParagraph.h =================================================================== --- src/frontends/qt4/QParagraph.h (revision 18853) +++ src/frontends/qt4/QParagraph.h (working copy) @@ -44,13 +44,14 @@ QParagraph * form_; typedef std::map<LyXAlignment, QRadioButton *> QPRadioMap; QPRadioMap radioMap; +// typedef std::map<LyXAlignment, std::string> QPAlignmentLabels; +// QPAlignmentLabels labelMap; + protected Q_SLOTS: /// void change_adaptor(); /// void enableLinespacingValue(int); - /// - void on_alignDefaultCB_toggled(bool); }; Index: src/frontends/qt4/ui/ParagraphUi.ui =================================================================== --- src/frontends/qt4/ui/ParagraphUi.ui (revision 18853) +++ src/frontends/qt4/ui/ParagraphUi.ui (working copy) @@ -8,8 +8,8 @@ <rect> <x>0</x> <y>0</y> - <width>373</width> - <height>203</height> + <width>387</width> + <height>245</height> </rect> </property> <property name="sizePolicy" > @@ -36,7 +36,73 @@ <property name="spacing" > <number>6</number> </property> - <item row="4" column="0" colspan="2" > + <item rowspan="4" row="0" column="0" > + <widget class="QGroupBox" name="aligmentGB" > + <property name="sizePolicy" > + <sizepolicy> + <hsizetype>3</hsizetype> + <vsizetype>5</vsizetype> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="title" > + <string>Alignment</string> + </property> + <layout class="QGridLayout" > + <property name="margin" > + <number>9</number> + </property> + <property name="spacing" > + <number>6</number> + </property> + <item row="3" column="0" > + <widget class="QRadioButton" name="alignCenterRB" > + <property name="text" > + <string>&Center</string> + </property> + </widget> + </item> + <item row="4" column="0" > + <widget class="QRadioButton" name="alignRightRB" > + <property name="text" > + <string>&Right</string> + </property> + </widget> + </item> + <item row="2" column="0" > + <widget class="QRadioButton" name="alignLeftRB" > + <property name="text" > + <string>&Left</string> + </property> + </widget> + </item> + <item row="1" column="0" > + <widget class="QRadioButton" name="alignJustRB" > + <property name="text" > + <string>&Justified</string> + </property> + </widget> + </item> + <item row="0" column="0" > + <widget class="QRadioButton" name="alignDefaultRB" > + <property name="font" > + <font> + <italic>false</italic> + </font> + </property> + <property name="toolTip" > + <string>Use the default alignment for this paragraph, whatever it is.</string> + </property> + <property name="text" > + <string>Default</string> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item row="0" column="1" > <layout class="QHBoxLayout" > <property name="margin" > <number>0</number> @@ -45,16 +111,82 @@ <number>6</number> </property> <item> - <widget class="QPushButton" name="restorePB" > + <widget class="QLabel" name="linespacingL" > <property name="text" > - <string>&Restore</string> + <string>L&ine spacing:</string> </property> - <property name="autoDefault" > + <property name="buddy" > + <cstring>linespacing</cstring> + </property> + </widget> + </item> + <item> + <widget class="QComboBox" name="linespacing" > + <item> + <property name="text" > + <string>Default</string> + </property> + </item> + <item> + <property name="text" > + <string>Single</string> + </property> + </item> + <item> + <property name="text" > + <string>1.5</string> + </property> + </item> + <item> + <property name="text" > + <string>Double</string> + </property> + </item> + <item> + <property name="text" > + <string>Custom</string> + </property> + </item> + </widget> + </item> + <item> + <widget class="QLineEdit" name="linespacingValue" > + <property name="enabled" > <bool>false</bool> </property> </widget> </item> + </layout> + </item> + <item row="2" column="1" > + <spacer> + <property name="orientation" > + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" > + <size> + <width>249</width> + <height>31</height> + </size> + </property> + </spacer> + </item> + <item row="1" column="1" > + <layout class="QHBoxLayout" > + <property name="margin" > + <number>0</number> + </property> + <property name="spacing" > + <number>6</number> + </property> <item> + <widget class="QCheckBox" name="indentCB" > + <property name="text" > + <string>Indent &Paragraph</string> + </property> + </widget> + </item> + <item> <spacer> <property name="orientation" > <enum>Qt::Horizontal</enum> @@ -70,39 +202,6 @@ </property> </spacer> </item> - <item> - <widget class="QPushButton" name="okPB" > - <property name="text" > - <string>&OK</string> - </property> - <property name="autoDefault" > - <bool>false</bool> - </property> - <property name="default" > - <bool>true</bool> - </property> - </widget> - </item> - <item> - <widget class="QPushButton" name="applyPB" > - <property name="text" > - <string>&Apply</string> - </property> - <property name="autoDefault" > - <bool>false</bool> - </property> - </widget> - </item> - <item> - <widget class="QPushButton" name="closePB" > - <property name="text" > - <string>&Close</string> - </property> - <property name="autoDefault" > - <bool>false</bool> - </property> - </widget> - </item> </layout> </item> <item row="3" column="1" > @@ -143,7 +242,7 @@ </layout> </widget> </item> - <item row="1" column="1" > + <item row="4" column="0" colspan="2" > <layout class="QHBoxLayout" > <property name="margin" > <number>0</number> @@ -152,10 +251,13 @@ <number>6</number> </property> <item> - <widget class="QCheckBox" name="indentCB" > + <widget class="QPushButton" name="restorePB" > <property name="text" > - <string>Indent &Paragraph</string> + <string>&Restore</string> </property> + <property name="autoDefault" > + <bool>false</bool> + </property> </widget> </item> <item> @@ -174,135 +276,41 @@ </property> </spacer> </item> - </layout> - </item> - <item row="2" column="1" > - <spacer> - <property name="orientation" > - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" > - <size> - <width>249</width> - <height>31</height> - </size> - </property> - </spacer> - </item> - <item row="0" column="1" > - <layout class="QHBoxLayout" > - <property name="margin" > - <number>0</number> - </property> - <property name="spacing" > - <number>6</number> - </property> <item> - <widget class="QLabel" name="linespacingL" > + <widget class="QPushButton" name="okPB" > <property name="text" > - <string>L&ine spacing:</string> + <string>&OK</string> </property> - <property name="buddy" > - <cstring>linespacing</cstring> + <property name="autoDefault" > + <bool>false</bool> </property> + <property name="default" > + <bool>true</bool> + </property> </widget> </item> <item> - <widget class="QComboBox" name="linespacing" > - <item> - <property name="text" > - <string>Default</string> - </property> - </item> - <item> - <property name="text" > - <string>Single</string> - </property> - </item> - <item> - <property name="text" > - <string>1.5</string> - </property> - </item> - <item> - <property name="text" > - <string>Double</string> - </property> - </item> - <item> - <property name="text" > - <string>Custom</string> - </property> - </item> + <widget class="QPushButton" name="applyPB" > + <property name="text" > + <string>&Apply</string> + </property> + <property name="autoDefault" > + <bool>false</bool> + </property> </widget> </item> <item> - <widget class="QLineEdit" name="linespacingValue" > - <property name="enabled" > + <widget class="QPushButton" name="closePB" > + <property name="text" > + <string>&Close</string> + </property> + <property name="autoDefault" > <bool>false</bool> </property> </widget> </item> </layout> </item> - <item rowspan="4" row="0" column="0" > - <widget class="QGroupBox" name="aligmentGB" > - <property name="title" > - <string>Alignment</string> - </property> - <layout class="QVBoxLayout" > - <property name="margin" > - <number>9</number> - </property> - <property name="spacing" > - <number>6</number> - </property> - <item> - <widget class="QCheckBox" name="alignDefaultCB" > - <property name="font" > - <font> - <weight>50</weight> - <italic>true</italic> - <bold>false</bold> - <kerning>true</kerning> - </font> - </property> - <property name="text" > - <string>&Default</string> - </property> - </widget> - </item> - <item> - <widget class="QRadioButton" name="alignJustRB" > - <property name="text" > - <string>&Justified</string> - </property> - </widget> - </item> - <item> - <widget class="QRadioButton" name="alignLeftRB" > - <property name="text" > - <string>&Left</string> - </property> - </widget> - </item> - <item> - <widget class="QRadioButton" name="alignRightRB" > - <property name="text" > - <string>&Right</string> - </property> - </widget> - </item> - <item> - <widget class="QRadioButton" name="alignCenterRB" > - <property name="text" > - <string>&Center</string> - </property> - </widget> - </item> - </layout> - </widget> - </item> </layout> </widget> <tabstops>