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/detailedlistview.h

216 lines
6.2 KiB

/***************************************************************************
copyright : (C) 2001-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 DETAILEDLISTVIEW_H
#define DETAILEDLISTVIEW_H
#include "gui/listview.h"
#include "observer.h"
#include "filter.h"
#include <tqstringlist.h>
#include <tqpixmap.h>
#include <tqvaluevector.h>
class TDEPopupMenu;
namespace Tellico {
class DetailedEntryItem;
/**
* The DetailedListView class shows detailed information about entries in the
* collection.
*
* @author Robby Stephenson
*/
class DetailedListView : public GUI::ListView, public Observer {
Q_OBJECT
public:
/**
* The constructor initializes the popup menu, but no columns are inserted.
*
* @param parent A pointer to the parent widget
* @param name The widget name
*/
DetailedListView(TQWidget* parent, const char* name=0);
~DetailedListView();
/**
* Event filter used to popup the menu
*/
bool eventFilter(TQObject* obj, TQEvent* ev);
/**
* Selects the item which refers to a certain entry.
*
* @param entry A pointer to the entry
*/
void setEntrySelected(Data::EntryPtr entry);
void setFilter(FilterPtr filter);
FilterPtr filter() { return m_filter; }
int prevSortedColumn() const;
int prev2SortedColumn() const;
virtual void setSorting(int column, bool ascending = true);
void setPrevSortedColumn(int prev1, int prev2);
TQString sortColumnTitle1() const;
TQString sortColumnTitle2() const;
TQString sortColumnTitle3() const;
TQStringList visibleColumns() const;
Data::EntryVec visibleEntries();
/**
* @param coll A pointer to the collection
*/
void addCollection(Data::CollPtr coll);
/**
* Removes all items which refers to a entry within a collection.
*
* @param coll A pointer to the collection
*/
void removeCollection(Data::CollPtr coll);
/**
* Adds a new list item showing the details for a entry.
*
* @param entry A pointer to the entry
*/
virtual void addEntries(Data::EntryVec entries);
/**
* Modifies any item which refers to a entry, resetting the column contents.
*
* @param entry A pointer to the entry
*/
virtual void modifyEntries(Data::EntryVec entries);
/**
* Removes any item which refers to a certain entry.
*
* @param entry A pointer to the entry
*/
virtual void removeEntries(Data::EntryVec entries);
virtual void addField(Data::CollPtr, Data::FieldPtr field);
void addField(Data::FieldPtr field, int width);
virtual void modifyField(Data::CollPtr, Data::FieldPtr oldField, Data::FieldPtr newField);
virtual void removeField(Data::CollPtr, Data::FieldPtr field);
void reorderFields(const Data::FieldVec& fields);
/**
* saveConfig is only needed for custom collections */
void saveConfig(Data::CollPtr coll, int saveConfig);
/**
* Select all visible items.
*/
void selectAllVisible();
int visibleItems() const { return m_filter ? m_visibleItems : childCount(); }
/**
* Set max size of pixmaps.
*
* @param width Width
* @param height Height
*/
void setPixmapSize(int width, int height) { m_pixWidth = width; m_pixHeight = height; }
void resetEntryStatus();
virtual int compare(int col, const GUI::ListViewItem* item1, GUI::ListViewItem* item2, bool asc);
public slots:
/**
* Resets the list view, clearing and deleting all items.
*/
void slotReset();
/**
* Refreshes the view, repopulating all items.
*/
void slotRefresh();
/**
* Refreshes all images only.
*/
void slotRefreshImages();
private:
DetailedEntryItem* addEntryInternal(Data::EntryPtr entry);
int compareColumn(int col, const GUI::ListViewItem* item1, GUI::ListViewItem* item2, bool asc);
/**
* A helper method to populate an item. The column text is initialized by pulling
* the contents from the entry pointer of the item, so it should properly be set
* before this method is called.
*
* @param item A pointer to the item
*/
void populateItem(DetailedEntryItem* item);
void populateColumn(int col);
void setPixmapAndText(DetailedEntryItem* item, int col, Data::FieldPtr field);
/**
* A helper method to locate any item which refers to a certain entry. If none
* is found, a NULL pointer is returned.
*
* @param entry A pointer to the entry
* @return A pointer to the item
*/
DetailedEntryItem* locateItem(Data::EntryPtr entry);
void showColumn(int col);
void hideColumn(int col);
void updateFirstSection();
void resetComparisons();
private slots:
/**
* Handles the appearance of the popup menu.
*
* @param item A pointer to the list item underneath the mouse
* @param point The location point
* @param col The column number, not currently used
*/
void contextMenuRequested(TQListViewItem* item, const TQPoint& point, int col);
void slotHeaderMenuActivated(int id);
void slotCacheColumnWidth(int section, int oldSize, int newSize);
/**
* Slot to update the position of the pixmap
*/
void slotUpdatePixmap();
private:
struct ConfigInfo {
TQStringList cols;
TQValueList<int> widths;
TQValueList<int> order;
int colSorted;
bool ascSort : 1;
int prevSort;
int prev2Sort;
};
TDEPopupMenu* m_headerMenu;
TQValueVector<int> m_columnWidths;
TQValueVector<bool> m_isDirty;
TQValueVector<int> m_imageColumns;
bool m_loadingCollection;
TQPixmap m_entryPix;
TQPixmap m_checkPix;
FilterPtr m_filter;
int m_prevSortColumn;
int m_prev2SortColumn;
int m_firstSection;
int m_visibleItems;
int m_pixWidth;
int m_pixHeight;
};
} // end namespace;
#endif