/*************************************************************************** copyright : (C) 2003-2006 by Robby Stephenson email : robby@periapsis.org ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of version 2 of the GNU General Public License as * * published by the Free Software Foundation; * * * ***************************************************************************/ #ifndef TELLICO_KERNEL_H #define TELLICO_KERNEL_H #include "datavectors.h" #include "borrower.h" #include <kcommand.h> class KURL; class TQWidget; class TQString; class TQStringList; namespace Tellico { class MainWindow; class Filter; namespace Command { class Group; } namespace Data { class Collection; } /** * @author Robby Stephenson */ class Kernel { public: static Kernel* self() { return s_self; } /** * Initializes the singleton. Should just be called once, from Tellico::MainWindow */ static void init(MainWindow* parent) { if(!s_self) s_self = new Kernel(parent); } /** * Returns a pointer to the parent widget. This is mainly used for error dialogs and the like. * * @return The widget pointer */ TQWidget* widget() { return m_widget; } /** * Returns the url of the current document. * * @return The URL */ const KURL& URL() const; /** * Returns a list of the field titles, wraps the call to the collection itself. * * @return the field titles */ const TQStringList& fieldTitles() const; /** * Returns the name of an field, given its title. Wraps the call to the collection itself. * * @param title The field title * @return The field name */ TQString fieldNameByTitle(const TQString& title) const; /** * Returns the title of an field, given its name. Wraps the call to the collection itself. * * @param name The field name * @return The field title */ TQString fieldTitleByName(const TQString& name) const; TQStringList valuesByFieldName(const TQString& name) const; int collectionType() const; TQString collectionTypeName() const; void sorry(const TQString& text, TQWidget* widget=0); void beginCommandGroup(const TQString& name); void endCommandGroup(); void resetHistory(); bool addField(Data::FieldPtr field); bool modifyField(Data::FieldPtr field); bool removeField(Data::FieldPtr field); void addEntries(Data::EntryVec entries, bool checkFields); void modifyEntries(Data::EntryVec oldEntries, Data::EntryVec newEntries); void updateEntry(Data::EntryPtr oldEntry, Data::EntryPtr newEntry, bool overWrite); void removeEntries(Data::EntryVec entries); bool addLoans(Data::EntryVec entries); bool modifyLoan(Data::LoanPtr loan); bool removeLoans(Data::LoanVec loans); void addFilter(FilterPtr filter); bool modifyFilter(FilterPtr filter); bool removeFilter(FilterPtr filter); void reorderFields(const Data::FieldVec& fields); void appendCollection(Data::CollPtr coll); void mergeCollection(Data::CollPtr coll); void replaceCollection(Data::CollPtr coll); // adds new fields into collection if any values in entries are not empty // first object is modified fields, second is new fields TQPair<Data::FieldVec, Data::FieldVec> mergeFields(Data::CollPtr coll, Data::FieldVec fields, Data::EntryVec entries); void renameCollection(); const KCommandHistory* commandHistory() { return &m_commandHistory; } int askAndMerge(Data::EntryPtr entry1, Data::EntryPtr entry2, Data::FieldPtr field, TQString value1 = TQString(), TQString value2 = TQString()); private: static Kernel* s_self; // all constructors are private Kernel(MainWindow* parent); Kernel(const Kernel&); Kernel& operator=(const Kernel&); void doCommand(KCommand* command); TQWidget* m_widget; KCommandHistory m_commandHistory; Command::Group* m_commandGroup; }; } // end namespace #endif