annotate widgets/SubdividingMenu.h @ 282:d9319859a4cf tip

(none)
author benoitrigolleau
date Fri, 31 Oct 2008 11:00:24 +0000
parents fc9323a41f5a
children
rev   line source
lbajardsilogic@0 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
lbajardsilogic@0 2
lbajardsilogic@0 3 /*
lbajardsilogic@0 4 Sonic Visualiser
lbajardsilogic@0 5 An audio file viewer and annotation editor.
lbajardsilogic@0 6 Centre for Digital Music, Queen Mary, University of London.
lbajardsilogic@0 7 This file copyright 2006 QMUL.
lbajardsilogic@0 8
lbajardsilogic@0 9 This program is free software; you can redistribute it and/or
lbajardsilogic@0 10 modify it under the terms of the GNU General Public License as
lbajardsilogic@0 11 published by the Free Software Foundation; either version 2 of the
lbajardsilogic@0 12 License, or (at your option) any later version. See the file
lbajardsilogic@0 13 COPYING included with this distribution for more information.
lbajardsilogic@0 14 */
lbajardsilogic@0 15
lbajardsilogic@0 16 #ifndef _SUBDIVIDING_MENU_H_
lbajardsilogic@0 17 #define _SUBDIVIDING_MENU_H_
lbajardsilogic@0 18
lbajardsilogic@0 19 #include <QMenu>
lbajardsilogic@0 20
lbajardsilogic@0 21 #include <QString>
lbajardsilogic@0 22 #include <set>
lbajardsilogic@0 23 #include <map>
lbajardsilogic@0 24
lbajardsilogic@0 25 /**
lbajardsilogic@0 26 * A menu that divides its entries into submenus, alphabetically. For
lbajardsilogic@0 27 * menus that may contain a very large or small number of named items
lbajardsilogic@0 28 * (e.g. plugins).
lbajardsilogic@0 29 *
lbajardsilogic@0 30 * The menu needs to be told, before any of the actions are added,
lbajardsilogic@0 31 * what the set of entry strings will be, so it can determine a
lbajardsilogic@0 32 * reasonable categorisation. Do this by calling the setEntries()
lbajardsilogic@0 33 * method. If it isn't practical to do this in advance, then add the
lbajardsilogic@0 34 * entries and call entriesAdded() afterwards instead.
lbajardsilogic@0 35 */
lbajardsilogic@0 36
lbajardsilogic@0 37 class SubdividingMenu : public QMenu
lbajardsilogic@0 38 {
lbajardsilogic@0 39 Q_OBJECT
lbajardsilogic@0 40
lbajardsilogic@0 41 public:
lbajardsilogic@0 42 SubdividingMenu(size_t lowerLimit = 0, size_t upperLimit = 0,
lbajardsilogic@0 43 QWidget *parent = 0);
lbajardsilogic@0 44 SubdividingMenu(const QString &title, size_t lowerLimit = 0,
lbajardsilogic@0 45 size_t upperLimit = 0, QWidget *parent = 0);
lbajardsilogic@0 46 virtual ~SubdividingMenu();
lbajardsilogic@0 47
lbajardsilogic@0 48 void setEntries(const std::set<QString> &entries);
lbajardsilogic@0 49 void entriesAdded();
lbajardsilogic@0 50
lbajardsilogic@0 51 // Action names and strings passed to addAction and addMenu must
lbajardsilogic@0 52 // appear in the set previously given to setEntries. If you want
lbajardsilogic@0 53 // to use a different string, use the two-argument method and pass
lbajardsilogic@0 54 // the entry string (used to determine which submenu the action
lbajardsilogic@0 55 // ends up on) as the first argument.
lbajardsilogic@0 56
lbajardsilogic@0 57 virtual void addAction(QAction *);
lbajardsilogic@0 58 virtual QAction *addAction(const QString &);
lbajardsilogic@0 59 virtual void addAction(const QString &entry, QAction *);
lbajardsilogic@0 60
lbajardsilogic@0 61 virtual void addMenu(QMenu *);
lbajardsilogic@0 62 virtual QMenu *addMenu(const QString &);
lbajardsilogic@0 63 virtual void addMenu(const QString &entry, QMenu *);
lbajardsilogic@0 64
lbajardsilogic@0 65 protected:
lbajardsilogic@0 66 std::map<QString, QMenu *> m_nameToChunkMenuMap;
lbajardsilogic@0 67
lbajardsilogic@0 68 size_t m_lowerLimit;
lbajardsilogic@0 69 size_t m_upperLimit;
lbajardsilogic@0 70
lbajardsilogic@0 71 bool m_entriesSet;
lbajardsilogic@0 72 std::map<QString, QObject *> m_pendingEntries;
lbajardsilogic@0 73 };
lbajardsilogic@0 74
lbajardsilogic@0 75 #endif
lbajardsilogic@0 76