Main Page | Class Hierarchy | Class List | File List | Class Members | File Members

bibliography.cpp

Go to the documentation of this file.
00001 /***************************************************************************
00002  *                                                                         *
00003  *   bibliography.cpp                                                              *
00004  *                                                                         *
00005  *   This program is free software; you can redistribute it and/or modify  *
00006  *   it under the terms of the GNU General Public License as published by  *
00007  *   the Free Software Foundation; either version 2 of the License, or     *
00008  *   (at your option) any later version.                                   *
00009  *                                                                         *
00010  *   Read the file COPYING for details.                                    *
00011  *                                                                         *
00012  *   copyright: (C) 2003 by Jan Mueller                                    *
00013  *   email: janmueller7@hotmail.com                                        *
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   // FixMe
00207   //  write();
00208   //  setData();
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 }

Generated on Sat Mar 27 19:20:37 2004 for Literature by doxygen 1.3.6-20040222