summaryrefslogtreecommitdiffstats
path: root/src/controller.h
diff options
context:
space:
mode:
authortpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2010-03-01 19:17:32 +0000
committertpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2010-03-01 19:17:32 +0000
commite38d2351b83fa65c66ccde443777647ef5cb6cff (patch)
tree1897fc20e9f73a81c520a5b9f76f8ed042124883 /src/controller.h
downloadtellico-e38d2351b83fa65c66ccde443777647ef5cb6cff.tar.gz
tellico-e38d2351b83fa65c66ccde443777647ef5cb6cff.zip
Added KDE3 version of Tellico
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/tellico@1097620 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'src/controller.h')
-rw-r--r--src/controller.h175
1 files changed, 175 insertions, 0 deletions
diff --git a/src/controller.h b/src/controller.h
new file mode 100644
index 0000000..58c3917
--- /dev/null
+++ b/src/controller.h
@@ -0,0 +1,175 @@
+/***************************************************************************
+ copyright : (C) 2003-2006 by Robby Stephenson
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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 TELLICOCONTROLLER_H
+#define TELLICOCONTROLLER_H
+
+class QPopupMenu;
+
+namespace Tellico {
+ class MainWindow;
+ class GroupView;
+ class GroupIterator;
+ namespace Data {
+ class Collection;
+ }
+}
+
+#include "entry.h"
+
+#include <qobject.h>
+
+namespace Tellico {
+class Observer;
+
+/**
+ * @author Robby Stephenson
+ */
+class Controller : public QObject {
+Q_OBJECT
+
+public:
+ static Controller* self() { return s_self; }
+ /**
+ * Initializes the singleton. Should just be called once, from Tellico::MainWindow
+ */
+ static void init(MainWindow* parent, const char* name=0) {
+ if(!s_self) s_self = new Controller(parent, name);
+ }
+
+ const Data::EntryVec& selectedEntries() const { return m_selectedEntries; }
+ Data::EntryVec visibleEntries();
+
+ void editEntry(Data::EntryPtr) const;
+ void hideTabs() const;
+ /**
+ * Plug the default collection actions into a widget
+ */
+ void plugCollectionActions(QPopupMenu* popup);
+ /**
+ * Plug the default entry actions into a widget
+ */
+ void plugEntryActions(QPopupMenu* popup);
+ void updateActions() const;
+
+ GroupIterator groupIterator() const;
+ /**
+ * Returns the name of the field being used to group the entries.
+ * That field name may not be an actual field in the collection, since
+ * pseudo-groups like _people exist.
+ */
+ QString groupBy() const;
+ /**
+ * Returns a list of the fields being used to group the entries.
+ * For ordinary fields, the list has a single item, the field name.
+ * For the pseudo-group _people, all the people fields are included.
+ */
+ QStringList expandedGroupBy() const;
+ /**
+ * Returns a list of the titles of the fields being used to sort the entries in the detailed column view.
+ */
+ QStringList sortTitles() const;
+ /**
+ * Returns the title of the fields currently visible in the detailed column view.
+ */
+ QStringList visibleColumns() const;
+
+ void addObserver(Observer* obs);
+ void removeObserver(Observer* obs);
+
+ void addedField(Data::CollPtr coll, Data::FieldPtr field);
+ void modifiedField(Data::CollPtr coll, Data::FieldPtr oldField, Data::FieldPtr newField);
+ void removedField(Data::CollPtr coll, Data::FieldPtr field);
+
+ void addedEntries(Data::EntryVec entries);
+ void modifiedEntries(Data::EntryVec entries);
+ void removedEntries(Data::EntryVec entries);
+
+ void addedBorrower(Data::BorrowerPtr borrower);
+ void modifiedBorrower(Data::BorrowerPtr borrower);
+
+ void addedFilter(FilterPtr filter);
+ void removedFilter(FilterPtr filter);
+
+ void reorderedFields(Data::CollPtr coll);
+ void updatedFetchers();
+
+public slots:
+ /**
+ * When a collection is added to the document, certain actions need to be taken
+ * by the parent app. The collection toolbar is updated, the entry count is set, and
+ * the collection's modified signal is connected to the @ref GroupView widget.
+ *
+ * @param coll A pointer to the collection being added
+ */
+ void slotCollectionAdded(Tellico::Data::CollPtr coll);
+ void slotCollectionModified(Tellico::Data::CollPtr coll);
+ /**
+ * Removes a collection from all the widgets
+ *
+ * @param coll A pointer to the collection being added
+ */
+ void slotCollectionDeleted(Tellico::Data::CollPtr coll);
+ void slotRefreshField(Tellico::Data::FieldPtr field);
+
+ void slotClearSelection();
+ /**
+ * Updates the widgets when entries are selected.
+ *
+ * param widget A pointer to the widget where the entries were selected
+ * @param widget The widget doing the selecting, if NULL, then use previous
+ * @param entries The list of selected entries
+ */
+ void slotUpdateSelection(QWidget* widget, const Tellico::Data::EntryVec& entries);
+ void slotUpdateCurrent(const Tellico::Data::EntryVec& entries);
+ void slotCopySelectedEntries();
+ void slotUpdateSelectedEntries(const QString& source);
+ void slotDeleteSelectedEntries();
+ void slotMergeSelectedEntries();
+ void slotUpdateFilter(Tellico::FilterPtr filter);
+ void slotCheckOut();
+ void slotCheckIn();
+ void slotCheckIn(const Data::EntryVec& entries);
+ void slotGoPrevEntry();
+ void slotGoNextEntry();
+
+signals:
+ void collectionAdded(int collType);
+
+private:
+ static Controller* s_self;
+ Controller(MainWindow* parent, const char* name);
+
+ void blockAllSignals(bool block) const;
+ bool canCheckIn() const;
+ void plugUpdateMenu(QPopupMenu* popup);
+ enum EntryDirection { PrevEntry, NextEntry };
+ void goEntrySibling(EntryDirection dir);
+
+ MainWindow* m_mainWindow;
+
+ bool m_working;
+
+ typedef PtrVector<Tellico::Observer> ObserverVec;
+ ObserverVec m_observers;
+
+ /**
+ * Keep track of the selected entries so that a top-level delete has something for reference
+ */
+ Data::EntryVec m_selectedEntries;
+ Data::EntryVec m_currentEntries;
+ QWidget* m_widgetWithSelection;
+};
+
+} // end namespace
+#endif