00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include "bibliography.h"
00018 #include "liturl.h"
00019 #include <qlayout.h>
00020 #include <qtoolbar.h>
00021 #include <qaction.h>
00022 #include <qpixmap.h>
00023 #include <qmessagebox.h>
00024 #include <qlineedit.h>
00025 #include <qlabel.h>
00026 #include <qapplication.h>
00027 #include <qsqldatabase.h>
00028 #include <qsqlcursor.h>
00029 #include <qevent.h>
00030 #include <qlayout.h>
00031 #include <qsettings.h>
00032 #include <qtextedit.h>
00033 #include <qlayout.h>
00034 #include <qpushbutton.h>
00035 #include "error.h"
00036 #include "global.h"
00037 #include "mainwindowimpl.h"
00038 #include "bibliographyform.h"
00039 #include "urlevent.h"
00040 #include "selectitem.h"
00041 #include "bibtextypes.h"
00042 #include "bibtexfactory.h"
00043
00044 Bibliography::Bibliography(LitUrl url, QObject *receiver, QString slot, MainWindow *parent, const char *name): ReadWriteFormBase(url, receiver, slot, parent, name), toolbar(0L) {
00045 biblioform=new BibliographyForm(this, "biblioform");
00046 QHBoxLayout *l=new QHBoxLayout(this);
00047 l->addWidget(biblioform);
00048 initToolBar();
00049 connect(biblioform->choose_org_publisher, SIGNAL(clicked()), this, SLOT(chooseOrgPublisher()));
00050 connect(biblioform->genbibtex, SIGNAL(clicked()), this, SLOT(generateBibTex()));
00051 QSettings settings;
00052 QString backgr = settings.readEntry(QString("/literature/backgr_")+name, ""); if(!backgr.isEmpty()) biblioform->setErasePixmap(QPixmap(backgr));
00053 setData();
00054 }
00055
00056 void Bibliography::initToolBar() {
00057 toolbar=new QToolBar(mainWindow());
00058
00059 showPublAction=new QAction("Show Publication", QIconSet(loadPixmap("showpubl.png")), "Show Publication", 0, this, "showpublication");
00060 connect(showPublAction, SIGNAL(activated()), this, SLOT(showPubl()));
00061 showPublAction->addTo(toolbar);
00062 toolbar->show();
00063 }
00064
00065 Bibliography::~Bibliography() {
00066 write();
00067 delete toolbar;
00068 }
00069
00070 void Bibliography::insertBibtexField(QString label, QString field, QFrame *frame, QSqlForm *form) {
00071 QLabel *l=new QLabel(frame);
00072 l->setText(label);
00073 QLineEdit *e = new QLineEdit(frame);
00074 form->insert(e, field);
00075 }
00076
00077 bool Bibliography::setData()
00078 {
00079 try {
00080 ReadWriteFormBase::setData();
00081 LitUrl u=url();
00082 setWorkingGui(true);
00083 form.clear();
00084 formcursor.clear();
00085 formcursor.setMode(QSqlCursor::Writable);
00086 formcursor.setName("publication");
00087 if(!formcursor.select(u.query()))
00088 throw(Error(formcursor.lastError()));
00089 if(formcursor.size()!=1) throw Error("Invalid Record!");
00090 formcursor.first();
00091 QString no=formcursor.value("no").toString();
00092 form.setRecord(formcursor.primeUpdate());
00093 form.insert(biblioform->title, "title");
00094 form.insert(biblioform->subtitle, "subtitle");
00095 form.insert(biblioform->translator, "translator");
00096 form.insert(biblioform->orgyear, "orgyear");
00097 form.insert(biblioform->orgtitle, "orgtitle");
00098 form.insert(biblioform->bibtex, "bibtex");
00099 form.insert(biblioform->isbn, "isbn_issn");
00100 form.insert(biblioform->hidingplace, "hidingplace");
00101 form.insert(biblioform->pages, "pages");
00102 form.insert(biblioform->modified, "modified");
00103 form.insert(biblioform->created, "created");
00104 int bibtextype=formcursor.value("entrytype").toInt();
00105
00106 QGridLayout *layout=new QGridLayout(biblioform->frame, 4, 6);
00107 layout->setAutoAdd(true);
00108 layout->setColSpacing(0, 60);
00109 layout->setColSpacing(1, 80);
00110 layout->setColSpacing(2, 60);
00111 layout->setColSpacing(3, 80);
00112 layout->setColSpacing(4, 60);
00113 layout->setColSpacing(5, 80);
00114
00115 layout->setColStretch(0, 0);
00116 layout->setColStretch(1, 1);
00117 layout->setColStretch(2, 0);
00118 layout->setColStretch(3, 1);
00119 layout->setColStretch(4, 0);
00120 layout->setColStretch(5, 1);
00121 layout->setSpacing(5);
00122
00123
00124 switch(bibtextype) {
00125 case BT_BOOK:
00126 case BT_INBOOK:
00127 case BT_INCOLLECTION:
00128 insertBibtexField("Editor ", "editor", biblioform->frame, &form);
00129 insertBibtexField("Type ", "type", biblioform->frame, &form);
00130 insertBibtexField("Series ", "series", biblioform->frame, &form);
00131 insertBibtexField("Volume/Number ", "volume", biblioform->frame, &form);
00132 insertBibtexField("Month ", "month", biblioform->frame, &form);
00133 insertBibtexField("Edition ", "edition", biblioform->frame, &form);
00134 break;
00135 case BT_BOOKLET:
00136 case BT_MISC:
00137 insertBibtexField("How Published ", "howpublished", biblioform->frame, &form);
00138 insertBibtexField("Month ", "month", biblioform->frame, &form);
00139 break;
00140 case BT_JOURNAL:
00141 case BT_ARTICLE:
00142 insertBibtexField("Number ", "number", biblioform->frame, &form);
00143 insertBibtexField("Volume ", "volume", biblioform->frame, &form);
00144 insertBibtexField("Month ", "month", biblioform->frame, &form);
00145 break;
00146 case BT_MANUAL:
00147 insertBibtexField("Organisation ", "organization", biblioform->frame, &form);
00148 insertBibtexField("Edition ", "edition", biblioform->frame, &form);
00149 insertBibtexField("Month ", "month", biblioform->frame, &form);
00150 break;
00151 case BT_PROCEEDING:
00152 case BT_INPROCEEDING:
00153 insertBibtexField("Editor ", "editor", biblioform->frame, &form);
00154 insertBibtexField("Organisation ", "organization", biblioform->frame, &form);
00155 insertBibtexField("Series ", "series", biblioform->frame, &form);
00156 insertBibtexField("Volume/Number ", "volume", biblioform->frame, &form);
00157 insertBibtexField("Month ", "month", biblioform->frame, &form);
00158 break;
00159 case BT_TECHREPORT:
00160 insertBibtexField("Type ", "type", biblioform->frame, &form);
00161 insertBibtexField("Month ", "month", biblioform->frame, &form);
00162 insertBibtexField("Number ", "number", biblioform->frame, &form);
00163 break;
00164 case BT_UNPUBLISHED:
00165 insertBibtexField("Month ", "month", biblioform->frame, &form);
00166 break;
00167 case BT_PHDTHESIS:
00168 case BT_MASTERTHESIS:
00169 insertBibtexField("Type ", "type", biblioform->frame, &form);
00170 insertBibtexField("Month ", "month", biblioform->frame, &form);
00171 insertBibtexField("School ", "school", biblioform->frame, &form);
00172 break;
00173 }
00174
00175 form.readFields();
00176
00177 QString orgpublisher=formcursor.value("orgpublisher_no").toString();
00178 QSqlQuery query("select publisher.name from publisher where no="+orgpublisher);
00179 if(query.first())
00180 biblioform->orgpublisher->setText(query.value(0).toString());
00181
00182
00183 setValid(true);
00184 } catch(Error &e) {
00185 setValid(false);
00186 setReadonlyGui(true);
00187 QMessageBox::warning(this, "Error", e.message());
00188 return false;
00189 }
00190 setValid(true);
00191 return true;
00192 }
00193
00194 void Bibliography::chooseOrgPublisher() {
00195 SelectItem *s=new SelectItem(this, "selorgpublisher");
00196 Q_ASSERT(s);
00197 s->setData("publisher/publisher", "select no, name from publisher order by name");
00198 if(s->exec()==QDialog::Accepted) {
00199 QSqlRecord *rec=formcursor.primeUpdate();
00200 rec->setValue("orgpublisher_no", no(s->url()));
00201 biblioform->orgpublisher->setText(s->text());
00202 }
00203 }
00204
00205 void Bibliography::generateBibTex() {
00206
00207
00208
00209 PublBibTexFactory f(formcursor);
00210 biblioform->bibtex->setText(f.getEntry());
00211 }
00212
00213 void Bibliography::setWorkingGui(bool work) {
00214 ReadWriteFormBase::setWorkingGui(work);
00215 }
00216
00217 void Bibliography::setReadonlyGui(bool ro) {
00218 debug("Bibliography::setReadonlyGui");
00219 ReadWriteFormBase::setReadonlyGui(ro);
00220
00221 form.insert(biblioform->subtitle, "subtitle");
00222 form.insert(biblioform->translator, "translator");
00223 form.insert(biblioform->orgyear, "orgyear");
00224 form.insert(biblioform->orgtitle, "orgtitle");
00225 form.insert(biblioform->bibtex, "bibtex");
00226 form.insert(biblioform->isbn, "isbn");
00227 form.insert(biblioform->hidingplace, "hidingplace");
00228 form.insert(biblioform->pages, "pages");
00229
00230
00231 biblioform->subtitle->setEnabled(!ro);
00232 biblioform->translator->setEnabled(!ro);
00233 biblioform->orgyear->setEnabled(!ro);
00234 biblioform->orgtitle->setEnabled(!ro);
00235 biblioform->bibtex->setEnabled(!ro);
00236 biblioform->isbn->setEnabled(!ro);
00237 biblioform->hidingplace->setEnabled(!ro);
00238 biblioform->pages->setEnabled(!ro);
00239 }
00240
00241 void Bibliography::setInvalidGui(bool inv) {
00242 ReadWriteFormBase::setInvalidGui(inv);
00243 setWorkingGui(false);
00244 setReadonlyGui(inv);
00245 }
00246
00247 void Bibliography::showPubl() {
00248 qApp->postEvent(topLevelWidget(), new UrlEvent("lit://publication/publication?no="+formcursor.value("no").toString(), false));
00249 }