Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions CHANGELOG
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,12 @@
- Fixes bug #1014 'journal' not recognized as alias for 'journaltitle''
- Fixes bug #874 Support of biblatex "date" field
- Fixes bug that prevented the secondary optional fields to update properly in the "Customize entry fields" dialog (in BibLatex mode)
- Added special fields 'Printed' and 'Read status', thereby implementing (at least partially):
- Feature #762 Printed attribute
- Feature #692 Marking of new entries and often read entries
- Feature #685 Highlight new entries that were "forgotten"
- Feature #602 could add the mark as read feature
- Feature #225 read? checkbox
2.10
- Made IEEEXploreFetcher author parsing work again.
- Added a few more characters in the HTML/Unicode to LaTeX conversion.
Expand Down
12 changes: 9 additions & 3 deletions src/main/java/net/sf/jabref/BasePanel.java
Original file line number Diff line number Diff line change
Expand Up @@ -90,9 +90,11 @@
import net.sf.jabref.labelPattern.SearchFixDuplicateLabels;
import net.sf.jabref.search.NoSearchMatcher;
import net.sf.jabref.search.SearchMatcher;
import net.sf.jabref.specialfields.Printed;
import net.sf.jabref.specialfields.Priority;
import net.sf.jabref.specialfields.Quality;
import net.sf.jabref.specialfields.Rank;
import net.sf.jabref.specialfields.ReadStatus;
import net.sf.jabref.specialfields.Relevance;
import net.sf.jabref.specialfields.SpecialFieldAction;
import net.sf.jabref.specialfields.SpecialFieldDatabaseChangeListener;
Expand Down Expand Up @@ -1558,13 +1560,17 @@ public void action() {
new SpecialFieldAction(frame, Relevance.getInstance(), Relevance.getInstance().getValues().get(0).getFieldValue(), true, Globals.lang("Marked entries as relevant"), "Marked %0 entries as relevant"));
actions.put(Quality.getInstance().getValues().get(0).getActionName(),
new SpecialFieldAction(frame, Quality.getInstance(), Quality.getInstance().getValues().get(0).getFieldValue(), true, Globals.lang("Marked entries' quality as good"), "Set quality of %0 entries to good"));
actions.put(Printed.getInstance().getValues().get(0).getActionName(),
new SpecialFieldAction(frame, Printed.getInstance(), Printed.getInstance().getValues().get(0).getFieldValue(), true, Globals.lang("Marked entries as printed"), "Marked %0 entries as printed"));

for (SpecialFieldValue prio: Priority.getInstance().getValues()) {
actions.put(prio.getActionName(), prio.getAction(this.frame));
}

for (SpecialFieldValue prio: Rank.getInstance().getValues()) {
actions.put(prio.getActionName(), prio.getAction(this.frame));
for (SpecialFieldValue rank: Rank.getInstance().getValues()) {
actions.put(rank.getActionName(), rank.getAction(this.frame));
}
for (SpecialFieldValue status: ReadStatus.getInstance().getValues()) {
actions.put(status.getActionName(), status.getAction(this.frame));
}

actions.put("togglePreview", new BaseAction() {
Expand Down
14 changes: 14 additions & 0 deletions src/main/java/net/sf/jabref/BibtexFields.java
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,20 @@ private BibtexFields()
dummy.setDisplayable(false);
}
add(dummy) ;
dummy = new BibtexSingleField( SpecialFieldsUtils.FIELDNAME_READ , false) ;
if (!Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SERIALIZESPECIALFIELDS)) {
dummy.setPrivate();
dummy.setWriteable(false);
dummy.setDisplayable(false);
}
add(dummy) ;
dummy = new BibtexSingleField( SpecialFieldsUtils.FIELDNAME_PRINTED , false) ;
if (!Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SERIALIZESPECIALFIELDS)) {
dummy.setPrivate();
dummy.setWriteable(false);
dummy.setDisplayable(false);
}
add(dummy) ;

// some semi-standard fields
dummy = new BibtexSingleField( KEY_FIELD, true ) ;
Expand Down
15 changes: 14 additions & 1 deletion src/main/java/net/sf/jabref/GUIGlobals.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,14 +27,17 @@

import javax.swing.ImageIcon;
import javax.swing.JLabel;

import javax.swing.SwingConstants;

import net.sf.jabref.external.ExternalFileType;

import org.xnap.commons.gui.shortcut.EmacsKeyBindings;

import net.sf.jabref.specialfields.Printed;
import net.sf.jabref.specialfields.Priority;
import net.sf.jabref.specialfields.Quality;
import net.sf.jabref.specialfields.Rank;
import net.sf.jabref.specialfields.ReadStatus;
import net.sf.jabref.specialfields.Relevance;
import net.sf.jabref.specialfields.SpecialFieldsUtils;

Expand Down Expand Up @@ -440,6 +443,16 @@ public static void init() {
lab.setToolTipText(Rank.getInstance().getToolTip());
tableIcons.put(SpecialFieldsUtils.FIELDNAME_PRIORITY, lab);

// Read icon used for menu
lab = new JLabel(ReadStatus.getInstance().getRepresentingIcon());
lab.setToolTipText(ReadStatus.getInstance().getToolTip());
tableIcons.put(SpecialFieldsUtils.FIELDNAME_READ, lab);

// Print icon used for menu
lab = new JLabel(Printed.getInstance().getRepresentingIcon());
lab.setToolTipText(Printed.getInstance().getToolTip());
tableIcons.put(SpecialFieldsUtils.FIELDNAME_PRINTED, lab);

//jabRefFont = new Font("arial", Font.ITALIC/*+Font.BOLD*/, 20);

if (Globals.prefs.getBoolean(JabRefPreferences.EDITOR_EMACS_KEYBINDINGS)) {
Expand Down
20 changes: 20 additions & 0 deletions src/main/java/net/sf/jabref/JabRefFrame.java
Original file line number Diff line number Diff line change
Expand Up @@ -68,9 +68,11 @@
import net.sf.jabref.plugin.PluginInstallerAction;
import net.sf.jabref.plugin.core.JabRefPlugin;
import net.sf.jabref.plugin.core.generated._JabRefPlugin.EntryFetcherExtension;
import net.sf.jabref.specialfields.Printed;
import net.sf.jabref.specialfields.Priority;
import net.sf.jabref.specialfields.Quality;
import net.sf.jabref.specialfields.Rank;
import net.sf.jabref.specialfields.ReadStatus;
import net.sf.jabref.specialfields.Relevance;
import net.sf.jabref.specialfields.SpecialFieldsUtils;
import net.sf.jabref.sql.importer.DbImportAction;
Expand Down Expand Up @@ -225,6 +227,10 @@ void addAction(Action a) {
Quality.getInstance().getValues().get(0).getActionName(),
Quality.getInstance().getValues().get(0).getMenuString(),
Quality.getInstance().getValues().get(0).getToolTipText()),
togglePrinted = new GeneralAction(
Printed.getInstance().getValues().get(0).getActionName(),
Printed.getInstance().getValues().get(0).getMenuString(),
Printed.getInstance().getValues().get(0).getToolTipText()),
// priority = new GeneralAction("setPriority", "Set priority",
// Globals.lang("Set priority")),
manageSelectors = new GeneralAction("manageSelectors", "Manage content selectors"),
Expand Down Expand Up @@ -1346,6 +1352,14 @@ private void fillMenu() {
RightClickMenu.populateSpecialFieldMenu(m, Priority.getInstance(), this);
edit.add(m);
}
if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_PRINTED)) {
edit.add(togglePrinted);
}
if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_READ)) {
m = new JMenu();
RightClickMenu.populateSpecialFieldMenu(m, ReadStatus.getInstance(), this);
edit.add(m);
}
}
edit.addSeparator();
edit.add(manageKeywords);
Expand Down Expand Up @@ -1572,6 +1586,12 @@ private void createToolBar() {
if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_PRIORITY)) {
tlb.add(net.sf.jabref.specialfields.SpecialFieldDropDown.generateSpecialFieldButtonWithDropDown(Priority.getInstance(), this));
}
if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_PRINTED)) {
tlb.addAction(togglePrinted);
}
if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_READ)) {
tlb.add(net.sf.jabref.specialfields.SpecialFieldDropDown.generateSpecialFieldButtonWithDropDown(ReadStatus.getInstance(), this));
}
}

tlb.addSeparator();
Expand Down
2 changes: 2 additions & 0 deletions src/main/java/net/sf/jabref/JabRefPreferences.java
Original file line number Diff line number Diff line change
Expand Up @@ -437,6 +437,8 @@ private JabRefPreferences() {
defaults.put(SpecialFieldsUtils.PREF_SHOWCOLUMN_RANKING, SpecialFieldsUtils.PREF_SHOWCOLUMN_RANKING_DEFAULT);
defaults.put(SpecialFieldsUtils.PREF_RANKING_COMPACT, SpecialFieldsUtils.PREF_RANKING_COMPACT_DEFAULT);
defaults.put(SpecialFieldsUtils.PREF_SHOWCOLUMN_RELEVANCE, SpecialFieldsUtils.PREF_SHOWCOLUMN_RELEVANCE_DEFAULT);
defaults.put(SpecialFieldsUtils.PREF_SHOWCOLUMN_PRINTED, SpecialFieldsUtils.PREF_SHOWCOLUMN_PRINTED_DEFAULT);
defaults.put(SpecialFieldsUtils.PREF_SHOWCOLUMN_READ, SpecialFieldsUtils.PREF_SHOWCOLUMN_READ_DEFAULT);
defaults.put(SpecialFieldsUtils.PREF_AUTOSYNCSPECIALFIELDSTOKEYWORDS, SpecialFieldsUtils.PREF_AUTOSYNCSPECIALFIELDSTOKEYWORDS_DEFAULT);
defaults.put(SpecialFieldsUtils.PREF_SERIALIZESPECIALFIELDS, SpecialFieldsUtils.PREF_SERIALIZESPECIALFIELDS_DEFAULT);

Expand Down
11 changes: 11 additions & 0 deletions src/main/java/net/sf/jabref/RightClickMenu.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,11 @@
import javax.swing.event.PopupMenuListener;

import net.sf.jabref.groups.*;
import net.sf.jabref.specialfields.Printed;
import net.sf.jabref.specialfields.Priority;
import net.sf.jabref.specialfields.Quality;
import net.sf.jabref.specialfields.Rank;
import net.sf.jabref.specialfields.ReadStatus;
import net.sf.jabref.specialfields.Relevance;
import net.sf.jabref.specialfields.SpecialField;
import net.sf.jabref.specialfields.SpecialFieldValue;
Expand All @@ -45,6 +47,7 @@ public class RightClickMenu extends JPopupMenu
groupMoveMenu = new JMenu(Globals.lang("Assign exclusively to group")), // JZTODO lyrics
rankingMenu = new JMenu(),
priorityMenu = new JMenu(),
readStatusMenu = new JMenu(),
typeMenu = new JMenu(Globals.lang("Change entry type"));
JMenuItem groupAdd, groupRemove, groupMoveTo;
JCheckBoxMenuItem
Expand Down Expand Up @@ -200,11 +203,19 @@ public void actionPerformed(ActionEvent e) {
if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_QUALITY)) {
add(Quality.getInstance().getValues().get(0).getMenuAction(panel.frame));
}
if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_PRINTED)) {
add(Printed.getInstance().getValues().get(0).getMenuAction(panel.frame));
}

if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_PRIORITY)) {
populateSpecialFieldMenu(this.priorityMenu, Priority.getInstance(), panel.frame);
add(this.priorityMenu);
}

if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_READ)) {
populateSpecialFieldMenu(this.readStatusMenu, ReadStatus.getInstance(), panel.frame);
add(this.readStatusMenu);
}

addSeparator();
}
Expand Down
36 changes: 27 additions & 9 deletions src/main/java/net/sf/jabref/TableColumnsTab.java
Original file line number Diff line number Diff line change
Expand Up @@ -54,9 +54,9 @@ class TableColumnsTab extends JPanel implements PrefsTab {
private JCheckBox showOneLetterHeadingForIconColumns;

/*** begin: special fields ***/
private JCheckBox specialFieldsEnabled, rankingColumn, compactRankingColumn, qualityColumn, priorityColumn, relevanceColumn;
private JCheckBox specialFieldsEnabled, rankingColumn, compactRankingColumn, qualityColumn, priorityColumn, relevanceColumn, printedColumn, readStatusColumn;
private JRadioButton syncKeywords, writeSpecialFields;
private boolean oldSpecialFieldsEnabled, oldRankingColumn, oldCompcatRankingColumn, oldQualityColumn, oldPriorityColumn, oldRelevanceColumn, oldSyncKeyWords, oldWriteSpecialFields;
private boolean oldSpecialFieldsEnabled, oldRankingColumn, oldCompcatRankingColumn, oldQualityColumn, oldPriorityColumn, oldRelevanceColumn, oldPrintedColumn, oldReadStatusColumn, oldSyncKeyWords, oldWriteSpecialFields;

/*** end: special fields ***/

Expand Down Expand Up @@ -237,6 +237,8 @@ public void stateChanged(ChangeEvent event) {
qualityColumn.setEnabled(isEnabled);
priorityColumn.setEnabled(isEnabled);
relevanceColumn.setEnabled(isEnabled);
printedColumn.setEnabled(isEnabled);
readStatusColumn.setEnabled(isEnabled);
syncKeywords.setEnabled(isEnabled);
writeSpecialFields.setEnabled(isEnabled);
}
Expand All @@ -251,6 +253,8 @@ public void stateChanged(ChangeEvent event) {
qualityColumn = new JCheckBox(Globals.lang("Show quality"));
priorityColumn = new JCheckBox(Globals.lang("Show priority"));
relevanceColumn = new JCheckBox(Globals.lang("Show relevance"));
printedColumn = new JCheckBox(Globals.lang("Show printed status"));
readStatusColumn = new JCheckBox(Globals.lang("Show read status"));

// "sync keywords" and "write special" fields may be configured mutually exclusive only
// The implementation supports all combinations (TRUE+TRUE and FALSE+FALSE, even if the latter does not make sense)
Expand All @@ -266,7 +270,7 @@ public void stateChanged(ChangeEvent event) {
builder.append(pan);

DefaultFormBuilder specialTableColumnsBuilder = new DefaultFormBuilder(new FormLayout(
"8dlu, 8dlu, 8cm, 8dlu, 8dlu, left:pref:grow", "pref, pref, pref, pref, pref, pref, pref, pref, pref, pref"));
"8dlu, 8dlu, 8cm, 8dlu, 8dlu, left:pref:grow", "pref, pref, pref, pref, pref, pref, pref, pref, pref, pref, pref, pref, pref"));
CellConstraints cc = new CellConstraints();

specialTableColumnsBuilder.add(specialFieldsEnabled, cc.xyw(1, 1, 3));
Expand All @@ -275,10 +279,12 @@ public void stateChanged(ChangeEvent event) {
specialTableColumnsBuilder.add(relevanceColumn, cc.xyw(2, 4, 2));
specialTableColumnsBuilder.add(qualityColumn, cc.xyw(2, 5, 2));
specialTableColumnsBuilder.add(priorityColumn, cc.xyw(2, 6, 2));
specialTableColumnsBuilder.add(syncKeywords, cc.xyw(2, 7, 2));
specialTableColumnsBuilder.add(writeSpecialFields, cc.xyw(2, 8, 2));
specialTableColumnsBuilder.add(showOneLetterHeadingForIconColumns, cc.xyw(1, 9, 5));
specialTableColumnsBuilder.add(hlb, cc.xyw(1, 10, 2));
specialTableColumnsBuilder.add(printedColumn, cc.xyw(2, 7, 2));
specialTableColumnsBuilder.add(readStatusColumn, cc.xyw(2, 8, 2));
specialTableColumnsBuilder.add(syncKeywords, cc.xyw(2, 10, 2));
specialTableColumnsBuilder.add(writeSpecialFields, cc.xyw(2, 11, 2));
specialTableColumnsBuilder.add(showOneLetterHeadingForIconColumns, cc.xyw(1, 12, 4));
specialTableColumnsBuilder.add(hlb, cc.xyw(1, 13, 2));

specialTableColumnsBuilder.add(fileColumn, cc.xyw(5, 1, 2));
specialTableColumnsBuilder.add(pdfColumn, cc.xyw(5, 2, 2));
Expand All @@ -288,7 +294,7 @@ public void stateChanged(ChangeEvent event) {
specialTableColumnsBuilder.add(arxivColumn, cc.xyw(5, 6, 2));

specialTableColumnsBuilder.add(extraFileColumns, cc.xyw(5, 7, 2));
specialTableColumnsBuilder.add(listOfFileColumnsScrollPane, cc.xywh(5, 8, 2, 3));
specialTableColumnsBuilder.add(listOfFileColumnsScrollPane, cc.xywh(5, 8, 2, 5));

builder.append(specialTableColumnsBuilder.getPanel());
builder.nextLine();
Expand Down Expand Up @@ -360,6 +366,12 @@ public void setValues() {

oldRelevanceColumn = _prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_RELEVANCE);
relevanceColumn.setSelected(oldRelevanceColumn);

oldPrintedColumn = _prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_PRINTED);
printedColumn.setSelected(oldPrintedColumn);

oldReadStatusColumn = _prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_READ);
readStatusColumn.setSelected(oldReadStatusColumn);

oldSyncKeyWords = _prefs.getBoolean(SpecialFieldsUtils.PREF_AUTOSYNCSPECIALFIELDSTOKEYWORDS);
syncKeywords.setSelected(oldSyncKeyWords);
Expand Down Expand Up @@ -630,7 +642,9 @@ public void storeSettings() {
newCompactRankingColumn = compactRankingColumn.isSelected(),
newQualityColumn = qualityColumn.isSelected(),
newPriorityColumn = priorityColumn.isSelected(),
newRelevanceColumn = relevanceColumn.isSelected(),
newRelevanceColumn = relevanceColumn.isSelected(),
newPrintedColumn = printedColumn.isSelected(),
newReadStatusColumn = readStatusColumn.isSelected(),
newSyncKeyWords = syncKeywords.isSelected(),
newWriteSpecialFields = writeSpecialFields.isSelected();

Expand All @@ -641,6 +655,8 @@ public void storeSettings() {
(oldQualityColumn != newQualityColumn) ||
(oldPriorityColumn != newPriorityColumn) ||
(oldRelevanceColumn != newRelevanceColumn) ||
(oldPrintedColumn != newPrintedColumn) ||
(oldReadStatusColumn != newReadStatusColumn) ||
(oldSyncKeyWords != newSyncKeyWords) ||
(oldWriteSpecialFields != newWriteSpecialFields);
if (restartRequired) {
Expand All @@ -661,6 +677,8 @@ public void storeSettings() {
_prefs.putBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_PRIORITY, newPriorityColumn);
_prefs.putBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_QUALITY, newQualityColumn);
_prefs.putBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_RELEVANCE, newRelevanceColumn);
_prefs.putBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_PRINTED, newPrintedColumn);
_prefs.putBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_READ, newReadStatusColumn);
_prefs.putBoolean(SpecialFieldsUtils.PREF_AUTOSYNCSPECIALFIELDSTOKEYWORDS, newSyncKeyWords);
_prefs.putBoolean(SpecialFieldsUtils.PREF_SERIALIZESPECIALFIELDS, newWriteSpecialFields);
}
Expand Down
16 changes: 16 additions & 0 deletions src/main/java/net/sf/jabref/gui/MainTableFormat.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,13 +31,16 @@
import net.sf.jabref.Util;
import net.sf.jabref.specialfields.Priority;
import net.sf.jabref.specialfields.Rank;
import net.sf.jabref.specialfields.ReadStatus;
import net.sf.jabref.specialfields.SpecialFieldValue;
import net.sf.jabref.specialfields.SpecialFieldsUtils;
import ca.odell.glazedlists.gui.TableFormat;
import ca.odell.glazedlists.matchers.Matcher;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
Expand Down Expand Up @@ -66,6 +69,8 @@ public class MainTableFormat implements TableFormat<BibtexEntry> {
PRIORITY = {SpecialFieldsUtils.FIELDNAME_PRIORITY},
RELEVANCE = {SpecialFieldsUtils.FIELDNAME_RELEVANCE},
QUALITY = {SpecialFieldsUtils.FIELDNAME_QUALITY},
PRINTED = {SpecialFieldsUtils.FIELDNAME_PRINTED},
READ = {SpecialFieldsUtils.FIELDNAME_READ},
FILE = {GUIGlobals.FILE_FIELD};

BasePanel panel;
Expand Down Expand Up @@ -236,6 +241,13 @@ else if (iconType != null) {
if (rank != null) {
o = rank.createLabel();
}
// Handle read status column special
// Extra handling because the icon depends on a FieldValue
} else if (iconType[hasField].equals(READ[0])) {
SpecialFieldValue status = ReadStatus.getInstance().parse(be.getField(SpecialFieldsUtils.FIELDNAME_READ));
if (status != null) {
o = status.createLabel();
}
} else {
o = GUIGlobals.getTableIcon(iconType[hasField]);

Expand Down Expand Up @@ -377,6 +389,10 @@ public void updateTableFormat() {
iconCols.put(coln++, QUALITY);
if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_PRIORITY))
iconCols.put(coln++, PRIORITY);
if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_PRINTED))
iconCols.put(coln++, PRINTED);
if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_READ))
iconCols.put(coln++, READ);
}

if (Globals.prefs.getBoolean("fileColumn"))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,10 @@ private int getSpecialColumnsCount() {
count++;
if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_PRIORITY))
count++;
if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_PRINTED))
count++;
if (Globals.prefs.getBoolean(SpecialFieldsUtils.PREF_SHOWCOLUMN_READ))
count++;
}

return count;
Expand Down
Loading