123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- /*
- * LinkedModelGroupViews.h - view for groups of linkable models
- *
- * Copyright (c) 2019-2019 Johannes Lorenz <j.git$$$lorenz-ho.me, $$$=@>
- *
- * This file is part of LMMS - https://lmms.io
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program (see COPYING); if not, write to the
- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301 USA.
- *
- */
- #ifndef LINKEDMODELGROUPVIEWS_H
- #define LINKEDMODELGROUPVIEWS_H
- #include <cstddef>
- #include <memory>
- #include <vector>
- #include <QWidget>
- /**
- @file LinkedModelGroupViews.h
- See Lv2ViewBase.h for example usage
- */
- /**
- View for a representative processor
- Features:
- * Remove button for removable models
- * Simple handling of adding, removing and model changing
- @note Neither this class, nor any inheriting classes, shall inherit
- ModelView. The "view" in the name is just for consistency
- with LinkedModelGroupsView.
- */
- class LinkedModelGroupView : public QWidget
- {
- public:
- /**
- @param colNum numbers of columns for the controls
- (link LEDs not counted)
- */
- LinkedModelGroupView(QWidget *parent, class LinkedModelGroup* model,
- std::size_t colNum);
- ~LinkedModelGroupView();
- //! Reconnect models if model changed
- void modelChanged(class LinkedModelGroup *linkedModelGroup);
- protected:
- //! Add a control to this widget
- //! @warning This widget will own this control, do not free it
- void addControl(class Control *ctrl, const std::string &id,
- const std::string& display, bool removable);
- void removeControl(const QString &key);
- private:
- class LinkedModelGroup* m_model;
- //! column number in surrounding grid in LinkedModelGroupsView
- std::size_t m_colNum;
- class ControlLayout* m_layout;
- std::map<std::string, std::unique_ptr<class Control>> m_widgets;
- };
- /**
- Container class for one LinkedModelGroupView
- @note It's intended this class does not inherit from ModelView.
- Inheriting classes need to do that, see e.g. Lv2Instrument.h
- */
- class LinkedModelGroupsView
- {
- protected:
- ~LinkedModelGroupsView() = default;
- //! Reconnect models if model changed; to be called by child virtuals
- void modelChanged(class LinkedModelGroups* ctrlBase);
- private:
- //! The base class must return the adressed group view,
- //! which has the same value as "this"
- virtual LinkedModelGroupView* getGroupView() = 0;
- };
- #endif // LINKEDMODELGROUPVIEWS_H
|