You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tellico/src/tellico_kernel.h

146 lines
4.3 KiB

/***************************************************************************
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