Citation dialog redesign

This commit is contained in:
Juergen Spitzmueller 2016-09-16 09:21:04 +02:00
parent c4aca5705b
commit 824e24ca60
3 changed files with 318 additions and 376 deletions

View File

@ -16,6 +16,7 @@
#include "GuiCitation.h"
#include "GuiApplication.h"
#include "GuiSelectionManager.h"
#include "LyXToolBox.h"
#include "qt_helpers.h"
@ -34,6 +35,7 @@
#include "support/lstrings.h"
#include <QCloseEvent>
#include <QMenu>
#include <QSettings>
#include <QShowEvent>
#include <QVariant>
@ -93,6 +95,35 @@ GuiCitation::GuiCitation(GuiView & lv)
{
setupUi(this);
// The filter bar
filter_ = new FancyLineEdit(this);
#if QT_VERSION >= 0x040600
filter_->setButtonPixmap(FancyLineEdit::Right, getPixmap("images/", "editclear", "svgz,png"));
filter_->setButtonVisible(FancyLineEdit::Right, true);
filter_->setButtonToolTip(FancyLineEdit::Right, qt_("Clear text"));
filter_->setAutoHideButton(FancyLineEdit::Right, true);
#endif
#if QT_VERSION >= 0x040700
filter_->setPlaceholderText(qt_("Filter available"));
#endif
filterBarL->addWidget(filter_, 0);
findKeysLA->setBuddy(filter_);
// Add search options as button menu
regexp_ = new QAction(qt_("Regular e&xpression"), this);
regexp_->setCheckable(true);
casesense_ = new QAction(qt_("Case se&nsitive"), this);
casesense_->setCheckable(true);
instant_ = new QAction(qt_("Search as you &type"), this);
instant_->setCheckable(true);
QMenu * searchOpts = new QMenu(this);
searchOpts->addAction(regexp_);
searchOpts->addAction(casesense_);
searchOpts->addAction(instant_);
searchOptionsPB->setMenu(searchOpts);
connect(citationStyleCO, SIGNAL(activated(int)),
this, SLOT(on_citationStyleCO_currentIndexChanged(int)));
connect(fulllistCB, SIGNAL(clicked()),
@ -103,8 +134,6 @@ GuiCitation::GuiCitation(GuiView & lv)
this, SLOT(updateStyles()));
connect(textAfterED, SIGNAL(textChanged(QString)),
this, SLOT(updateStyles()));
connect(findLE, SIGNAL(returnPressed()),
this, SLOT(on_searchPB_clicked()));
connect(textBeforeED, SIGNAL(returnPressed()),
this, SLOT(on_okPB_clicked()));
connect(textAfterED, SIGNAL(returnPressed()),
@ -119,7 +148,20 @@ GuiCitation::GuiCitation(GuiView & lv)
connect(selectionManager, SIGNAL(okHook()),
this, SLOT(on_okPB_clicked()));
setFocusProxy(availableLV);
connect(filter_, SIGNAL(rightButtonClicked()),
this, SLOT(resetFilter()));
connect(filter_, SIGNAL(textEdited(QString)),
this, SLOT(filterChanged(QString)));
connect(filter_, SIGNAL(returnPressed()),
this, SLOT(filterPressed()));
connect(regexp_, SIGNAL(triggered()),
this, SLOT(regexChanged()));
connect(casesense_, SIGNAL(triggered()),
this, SLOT(caseChanged()));
connect(instant_, SIGNAL(triggered(bool)),
this, SLOT(instantChanged(bool)));
setFocusProxy(filter_);
}
@ -152,42 +194,12 @@ void GuiCitation::applyView()
void GuiCitation::showEvent(QShowEvent * e)
{
findLE->clear();
filter_->clear();
availableLV->setFocus();
// Set the minimal size of the QToolbox. Without this, the size of the
// QToolbox is only determined by values in the ui file (e.g. computed by
// qtcreator) and therefore causes portability and localisation issues. Note
// that the page widgets must have a layout with layoutSizeContraint =
// SetMinimumSize or similar. KNOWN ISSUE: the calculations are incorrect
// the first time the dialog is shown. This problem is mitigated by the fact
// that LyX remembers the dialog sizes between sessions.
QSize minimum_size = QSize(0,0);
// Compute the max of the minimal sizes of the pages
QWidget * page;
for (int i = 0; (page = citationTB->widget(i)); ++i)
minimum_size = minimum_size.expandedTo(page->minimumSizeHint());
// Add the height of the tabs
if (citationTB->currentWidget())
minimum_size.rheight() += citationTB->height() -
citationTB->currentWidget()->height();
citationTB->setMinimumSize(minimum_size);
DialogView::showEvent(e);
}
void GuiCitation::on_citationTB_currentChanged(int i)
{
if (i == 0)
findLE->setFocus();
else if (citationStyleCO->isEnabled())
citationStyleCO->setFocus();
else
textAfterED->setFocus();
}
void GuiCitation::on_okPB_clicked()
{
applyView();
@ -212,6 +224,7 @@ void GuiCitation::on_applyPB_clicked()
void GuiCitation::on_restorePB_clicked()
{
init();
updateFilterHint();
}
@ -390,8 +403,9 @@ void GuiCitation::findText(QString const & text, bool reset)
else
entry_type = entries[index];
bool const case_sentitive = caseCB->checkState();
bool const reg_exp = regexCB->checkState();
bool const case_sentitive = casesense_->isChecked();
bool const reg_exp = regexp_->isChecked();
findKey(bi, text, onlyKeys, field, entry_type,
case_sentitive, reg_exp, reset);
//FIXME
@ -405,13 +419,13 @@ void GuiCitation::findText(QString const & text, bool reset)
void GuiCitation::on_fieldsCO_currentIndexChanged(int /*index*/)
{
findText(findLE->text(), true);
findText(filter_->text(), true);
}
void GuiCitation::on_entriesCO_currentIndexChanged(int /*index*/)
{
findText(findLE->text(), true);
findText(filter_->text(), true);
}
@ -425,43 +439,58 @@ void GuiCitation::on_citationStyleCO_currentIndexChanged(int index)
}
void GuiCitation::on_findLE_textChanged(const QString & text)
void GuiCitation::filterChanged(const QString & text)
{
bool const searchAsWeGo = (asTypeCB->checkState() == Qt::Checked);
searchPB->setDisabled(text.isEmpty() || searchAsWeGo);
if (!text.isEmpty()) {
if (searchAsWeGo)
findText(findLE->text());
if (instant_->isChecked())
findText(filter_->text());
return;
}
findText(findLE->text());
findLE->setFocus();
}
void GuiCitation::on_searchPB_clicked()
{
findText(findLE->text(), true);
findText(filter_->text());
filter_->setFocus();
}
void GuiCitation::on_caseCB_stateChanged(int)
void GuiCitation::filterPressed()
{
findText(findLE->text());
findText(filter_->text(), true);
}
void GuiCitation::on_regexCB_stateChanged(int)
void GuiCitation::resetFilter()
{
findText(findLE->text());
filter_->setText(QString());
findText(filter_->text(), true);
}
void GuiCitation::on_asTypeCB_stateChanged(int)
void GuiCitation::caseChanged()
{
bool const searchAsWeGo = (asTypeCB->checkState() == Qt::Checked);
searchPB->setDisabled(findLE->text().isEmpty() || searchAsWeGo);
if (searchAsWeGo)
findText(findLE->text(), true);
findText(filter_->text());
}
void GuiCitation::regexChanged()
{
findText(filter_->text());
}
void GuiCitation::updateFilterHint()
{
QString const hint = instant_->isChecked() ?
qt_("Enter the text to search for") :
qt_("Enter the text to search for and press Enter");
filter_->setToolTip(hint);
}
void GuiCitation::instantChanged(bool checked)
{
if (checked)
findText(filter_->text(), true);
updateFilterHint();
}
@ -786,11 +815,11 @@ void GuiCitation::saveSession() const
Dialog::saveSession();
QSettings settings;
settings.setValue(
sessionKey() + "/regex", regexCB->isChecked());
sessionKey() + "/regex", regexp_->isChecked());
settings.setValue(
sessionKey() + "/casesensitive", caseCB->isChecked());
sessionKey() + "/casesensitive", casesense_->isChecked());
settings.setValue(
sessionKey() + "/autofind", asTypeCB->isChecked());
sessionKey() + "/autofind", instant_->isChecked());
}
@ -798,12 +827,10 @@ void GuiCitation::restoreSession()
{
Dialog::restoreSession();
QSettings settings;
regexCB->setChecked(
settings.value(sessionKey() + "/regex").toBool());
caseCB->setChecked(
settings.value(sessionKey() + "/casesensitive").toBool());
asTypeCB->setChecked(
settings.value(sessionKey() + "/autofind").toBool());
regexp_->setChecked(settings.value(sessionKey() + "/regex").toBool());
casesense_->setChecked(settings.value(sessionKey() + "/casesensitive").toBool());
instant_->setChecked(settings.value(sessionKey() + "/autofind").toBool());
updateFilterHint();
}

View File

@ -17,6 +17,7 @@
#include "DialogView.h"
#include "ui_CitationUi.h"
#include "FancyLineEdit.h"
#include "insets/InsetCommandParams.h"
@ -44,19 +45,19 @@ public:
~GuiCitation();
private Q_SLOTS:
void on_citationTB_currentChanged(int i);
void on_okPB_clicked();
void on_cancelPB_clicked();
void on_restorePB_clicked();
void on_applyPB_clicked();
void on_searchPB_clicked();
void on_findLE_textChanged(const QString & text);
void filterPressed();
void filterChanged(const QString & text);
void on_fieldsCO_currentIndexChanged(int index);
void on_entriesCO_currentIndexChanged(int index);
void on_citationStyleCO_currentIndexChanged(int index);
void on_caseCB_stateChanged(int);
void on_regexCB_stateChanged(int);
void on_asTypeCB_stateChanged(int);
void resetFilter();
void caseChanged();
void regexChanged();
void instantChanged(bool checked);
void changed();
/// set the citation keys, mark as changed
void setCitedKeys();
@ -106,6 +107,8 @@ private:
void updateFormatting(CitationStyle currentStyle);
///
void updateControls(BiblioInfo const & bi);
/// Set the appropriate hinting text on the filter bar
void updateFilterHint();
///
void init();
/// Clear selected keys
@ -151,6 +154,16 @@ private:
/// the like, so it should be avoided.
BiblioInfo const & bibInfo() const;
/// contains the search box
FancyLineEdit * filter_;
/// Regexp action
QAction * regexp_;
/// Case sensitive action
QAction * casesense_;
/// Search as you type action
QAction * instant_;
/// last used citation style
int style_;
///

View File

@ -6,7 +6,7 @@
<rect>
<x>0</x>
<y>0</y>
<width>590</width>
<width>614</width>
<height>506</height>
</rect>
</property>
@ -16,8 +16,84 @@
<property name="sizeGripEnabled">
<bool>true</bool>
</property>
<layout class="QGridLayout" name="gridLayout_4" rowstretch="1,0,0">
<layout class="QGridLayout" name="gridLayout_3">
<item row="0" column="0">
<layout class="QHBoxLayout" name="horizontalLayout_6">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_5">
<item>
<widget class="QLabel" name="findKeysLA">
<property name="text">
<string>&amp;Filter:</string>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="filterBarL"/>
</item>
</layout>
</item>
<item>
<widget class="QComboBox" name="fieldsCO">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maxVisibleItems">
<number>16</number>
</property>
<property name="insertPolicy">
<enum>QComboBox::NoInsert</enum>
</property>
<property name="sizeAdjustPolicy">
<enum>QComboBox::AdjustToContents</enum>
</property>
<item>
<property name="text">
<string>All fields</string>
</property>
</item>
</widget>
</item>
<item>
<widget class="QComboBox" name="entriesCO">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="insertPolicy">
<enum>QComboBox::NoInsert</enum>
</property>
<property name="sizeAdjustPolicy">
<enum>QComboBox::AdjustToContents</enum>
</property>
<item>
<property name="text">
<string>All entry types</string>
</property>
</item>
</widget>
</item>
<item>
<widget class="QPushButton" name="searchOptionsPB">
<property name="text">
<string>O&amp;ptions</string>
</property>
<property name="autoDefault">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
</item>
<item row="1" column="0">
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<layout class="QGridLayout" name="gridLayout">
@ -104,8 +180,7 @@
</property>
<property name="icon">
<iconset>
<normaloff/>
</iconset>
<normaloff>.</normaloff>.</iconset>
</property>
<property name="autoDefault">
<bool>false</bool>
@ -128,8 +203,7 @@
</property>
<property name="icon">
<iconset>
<normaloff/>
</iconset>
<normaloff>.</normaloff>.</iconset>
</property>
<property name="autoDefault">
<bool>false</bool>
@ -143,7 +217,7 @@
<item>
<widget class="QLabel" name="selectedKeysLA">
<property name="text">
<string>S&amp;elected Citations:</string>
<string>Selected &amp;Citations:</string>
</property>
<property name="buddy">
<cstring>selectedLV</cstring>
@ -181,297 +255,127 @@
</item>
</layout>
</item>
<item row="1" column="0">
<widget class="lyx::frontend::LyXToolBox" name="citationTB">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
<item row="2" column="0">
<widget class="QGroupBox" name="FormattingGB">
<property name="title">
<string>Formatting</string>
</property>
<property name="accessibleName">
<string/>
</property>
<property name="currentIndex">
<number>1</number>
</property>
<widget class="QWidget" name="page">
<attribute name="label">
<string>&amp;Search Citation</string>
</attribute>
<layout class="QGridLayout" name="gridLayout_3" columnstretch="0,1,0,0,0,0">
<property name="sizeConstraint">
<enum>QLayout::SetMinimumSize</enum>
</property>
<item row="0" column="0">
<widget class="QLabel" name="findKeysLA">
<property name="text">
<string>Searc&amp;h:</string>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property>
<property name="buddy">
<cstring>findLE</cstring>
</property>
</widget>
</item>
<item row="0" column="1" colspan="4">
<widget class="QLineEdit" name="findLE">
<property name="toolTip">
<string>Enter the text to search for and press Enter or click the button to search</string>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="0" column="5">
<widget class="QPushButton" name="searchPB">
<property name="enabled">
<bool>false</bool>
</property>
<property name="toolTip">
<string>Click or press Enter in the search box to search</string>
</property>
<property name="text">
<string>&amp;Search</string>
</property>
<property name="autoDefault">
<bool>false</bool>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="fieldsLA">
<property name="text">
<string>Search &amp;field:</string>
</property>
<property name="buddy">
<cstring>fieldsCO</cstring>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QComboBox" name="fieldsCO">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maxVisibleItems">
<number>16</number>
</property>
<property name="insertPolicy">
<enum>QComboBox::NoInsert</enum>
</property>
<property name="sizeAdjustPolicy">
<enum>QComboBox::AdjustToContents</enum>
</property>
<item>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<widget class="QLabel" name="citationStyleLA">
<property name="text">
<string>All fields</string>
<string>Citation st&amp;yle:</string>
</property>
</item>
</widget>
</item>
<item row="1" column="2">
<spacer>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="1" column="3">
<widget class="QCheckBox" name="regexCB">
<property name="text">
<string>Regular e&amp;xpression</string>
</property>
</widget>
</item>
<item row="1" column="4" colspan="2">
<widget class="QCheckBox" name="caseCB">
<property name="text">
<string>Case se&amp;nsitive</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="entriesLA">
<property name="text">
<string>Entry t&amp;ypes:</string>
</property>
<property name="buddy">
<cstring>entriesCO</cstring>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QComboBox" name="entriesCO">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="insertPolicy">
<enum>QComboBox::NoInsert</enum>
</property>
<property name="sizeAdjustPolicy">
<enum>QComboBox::AdjustToContents</enum>
</property>
<item>
<property name="buddy">
<cstring>citationStyleCO</cstring>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="citationStyleCO">
<property name="toolTip">
<string>Natbib citation style to use</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="1" column="0">
<layout class="QHBoxLayout" name="horizontalLayout_4">
<item>
<widget class="QLabel" name="textBeforeLA">
<property name="text">
<string>All entry types</string>
<string>Text &amp;before:</string>
</property>
</item>
</widget>
</item>
<item row="2" column="2">
<spacer>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="2" column="4" colspan="2">
<widget class="QCheckBox" name="asTypeCB">
<property name="text">
<string>Search as you &amp;type</string>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="page_2">
<attribute name="label">
<string>For&amp;matting</string>
</attribute>
<layout class="QGridLayout" name="gridLayout_2">
<property name="sizeConstraint">
<enum>QLayout::SetMinimumSize</enum>
</property>
<item row="0" column="0">
<widget class="QLabel" name="citationStyleLA">
<property name="text">
<string>Citation st&amp;yle:</string>
</property>
<property name="buddy">
<cstring>citationStyleCO</cstring>
</property>
</widget>
</item>
<item row="0" column="1" colspan="3">
<widget class="QComboBox" name="citationStyleCO">
<property name="toolTip">
<string>Natbib citation style to use</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="textBeforeLA">
<property name="text">
<string>Text &amp;before:</string>
</property>
<property name="buddy">
<cstring>textBeforeED</cstring>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="textBeforeED">
<property name="toolTip">
<string>Text to place before citation</string>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QLabel" name="textAfterLA">
<property name="text">
<string>&amp;Text after:</string>
</property>
<property name="buddy">
<cstring>textAfterED</cstring>
</property>
</widget>
</item>
<item row="1" column="3">
<widget class="QLineEdit" name="textAfterED">
<property name="toolTip">
<string>Text to place after citation</string>
</property>
</widget>
</item>
<item row="2" column="0" colspan="4">
<layout class="QHBoxLayout">
<property name="spacing">
<number>6</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<spacer>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>21</width>
<height>26</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QCheckBox" name="fulllistCB">
<property name="toolTip">
<string>List all authors</string>
</property>
<property name="text">
<string>&amp;Full author list</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="forceuppercaseCB">
<property name="toolTip">
<string>Force upper case in citation</string>
</property>
<property name="text">
<string>Force u&amp;pper case</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<property name="buddy">
<cstring>textBeforeED</cstring>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="textBeforeED">
<property name="toolTip">
<string>Text to place before citation</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="textAfterLA">
<property name="text">
<string>&amp;Text after:</string>
</property>
<property name="buddy">
<cstring>textAfterED</cstring>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="textAfterED">
<property name="toolTip">
<string>Text to place after citation</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="2" column="0">
<layout class="QHBoxLayout">
<property name="spacing">
<number>6</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<spacer>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>21</width>
<height>26</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QCheckBox" name="forceuppercaseCB">
<property name="toolTip">
<string>Force upper case in citation</string>
</property>
<property name="text">
<string>Force upcas&amp;ing</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="fulllistCB">
<property name="toolTip">
<string>List all authors</string>
</property>
<property name="text">
<string>All aut&amp;hors</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
<item row="2" column="0">
<item row="3" column="0">
<layout class="QHBoxLayout">
<property name="spacing">
<number>6</number>
@ -548,28 +452,26 @@
</item>
</layout>
</widget>
<customwidgets>
<customwidget>
<class>lyx::frontend::LyXToolBox</class>
<extends>QToolBox</extends>
<header>LyXToolBox.h</header>
<container>1</container>
</customwidget>
</customwidgets>
<tabstops>
<tabstop>fieldsCO</tabstop>
<tabstop>entriesCO</tabstop>
<tabstop>searchOptionsPB</tabstop>
<tabstop>availableLV</tabstop>
<tabstop>selectedLV</tabstop>
<tabstop>addPB</tabstop>
<tabstop>deletePB</tabstop>
<tabstop>upPB</tabstop>
<tabstop>downPB</tabstop>
<tabstop>selectedLV</tabstop>
<tabstop>infoML</tabstop>
<tabstop>fulllistCB</tabstop>
<tabstop>citationStyleCO</tabstop>
<tabstop>textBeforeED</tabstop>
<tabstop>textAfterED</tabstop>
<tabstop>forceuppercaseCB</tabstop>
<tabstop>fulllistCB</tabstop>
<tabstop>restorePB</tabstop>
<tabstop>okPB</tabstop>
<tabstop>applyPB</tabstop>
<tabstop>cancelPB</tabstop>
<tabstop>infoML</tabstop>
</tabstops>
<includes>
<include location="local">qt_i18n.h</include>