diff options
author | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-03-01 18:37:05 +0000 |
---|---|---|
committer | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-03-01 18:37:05 +0000 |
commit | 145364a8af6a1fec06556221e66d4b724a62fc9a (patch) | |
tree | 53bd71a544008c518034f208d64c932dc2883f50 /src/gui/general/EditViewBase.h | |
download | rosegarden-145364a8af6a1fec06556221e66d4b724a62fc9a.tar.gz rosegarden-145364a8af6a1fec06556221e66d4b724a62fc9a.zip |
Added old abandoned KDE3 version of the RoseGarden MIDI tool
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/rosegarden@1097595 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'src/gui/general/EditViewBase.h')
-rw-r--r-- | src/gui/general/EditViewBase.h | 396 |
1 files changed, 396 insertions, 0 deletions
diff --git a/src/gui/general/EditViewBase.h b/src/gui/general/EditViewBase.h new file mode 100644 index 0000000..03784cb --- /dev/null +++ b/src/gui/general/EditViewBase.h @@ -0,0 +1,396 @@ +/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ + +/* + Rosegarden + A MIDI and audio sequencer and musical notation editor. + + This program is Copyright 2000-2008 + Guillaume Laurent <glaurent@telegraph-road.org>, + Chris Cannam <cannam@all-day-breakfast.com>, + Richard Bown <richard.bown@ferventsoftware.com> + + The moral rights of Guillaume Laurent, Chris Cannam, and Richard + Bown to claim authorship of this work have been asserted. + + Other copyrights also apply to some parts of this work. Please + see the AUTHORS file and individual file headers for details. + + 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. See the file + COPYING included with this distribution for more information. +*/ + +#ifndef _RG_EDITVIEWBASE_H_ +#define _RG_EDITVIEWBASE_H_ + +#include <set> +#include <string> +#include <kdockwidget.h> +#include <qstring.h> +#include <vector> +#include "base/Event.h" + + +class QWidget; +class QPaintEvent; +class QGridLayout; +class QFrame; +class QCloseEvent; +class QAccel; +class KToggleAction; +class KConfig; +class KCommand; +namespace Rosegarden { class EditViewTimeSigNotifier; } + + +namespace Rosegarden +{ + +class Segment; +class RosegardenGUIDoc; +class MultiViewCommandHistory; +class Event; +class EditToolBox; +class EditTool; + + +class EditViewBase : public KDockMainWindow +{ + + Q_OBJECT + +public: + + /** + * Create an EditViewBase for the segments \a segments from document \a doc. + * + * \arg cols : number of columns, main column is always rightmost + * + */ + EditViewBase(RosegardenGUIDoc *doc, + std::vector<Segment *> segments, + unsigned int cols, + QWidget *parent, + const char *name = 0); + + virtual ~EditViewBase(); + + const RosegardenGUIDoc *getDocument() const { return m_doc; } + RosegardenGUIDoc *getDocument() { return m_doc; } + + /** + * Refresh part of a Segment following a modification made in this + * or another view. The startTime and endTime give the extents of + * the modified region. This method is called following a + * modification to any Segment; no attempt has been made to check + * that the given Segment is actually shown in this view, so take + * care. + * + * If segment is null, refresh all segments. + * If the startTime and endTime are equal, refresh the whole of + * the relevant segments. + */ + virtual void refreshSegment(Segment *segment, + timeT startTime = 0, + timeT endTime = 0) = 0; + + /** + * Get the document's global command history + */ + virtual MultiViewCommandHistory *getCommandHistory(); + + /** + * Add a Command to the history + */ + virtual void addCommandToHistory(KCommand *); + + /** + * Update the view + */ + virtual void updateView() = 0; + + /** + * Return our local accelerator object + */ + QAccel* getAccelerators() { return m_accelerators; } + + /** + * Return a string unique to this view (amongst views currently + * extant) that can be used (e.g. as a prefix) to distinguish + * view-local properties. It's up to the subclass or other user + * of this string to manage the properties correctly, for example + * by deleting them from the events when the view closes. + */ + std::string getViewLocalPropertyPrefix() { + return m_viewLocalPropertyPrefix; + } + + /* + * So that other people can create tools against our view + * + */ + EditToolBox* getToolBox() { return m_toolBox; } + + /** + * Let tools know if their current element has gone + */ + virtual void handleEventRemoved(Event *event); + + static const unsigned int ID_STATUS_MSG; + static const unsigned int NbLayoutRows; + + +signals: + /** + * Tell the app to save the file. + */ + void saveFile(); + + /** + * Reopen the given segments in another sort of editor. + */ + void openInNotation(std::vector<Segment *>); + void openInMatrix(std::vector<Segment *>); + void openInPercussionMatrix(std::vector<Segment *>); + void openInEventList(std::vector<Segment *>); + + /** + * Tell the main view that the track being edited is the + * current selected track + * This is used by #slotToggleSolo + */ + void selectTrack(int); + + /** + * Tell the main view that the solo status has changed (the user clicked on the 'solo' toggle) + */ + void toggleSolo(bool); + + void windowActivated(); + +public slots: + /** + * close window + */ + virtual void slotCloseWindow(); + + /** + * put the indicationed text/object into the clipboard and remove * it + * from the document + */ + virtual void slotEditCut() = 0; + + /** + * put the indicationed text/object into the clipboard + */ + virtual void slotEditCopy() = 0; + + /** + * paste the clipboard into the document + */ + virtual void slotEditPaste() = 0; + + /** + * toggles the main toolbar + */ + virtual void slotToggleToolBar(); + + /** + * toggles the statusbar + */ + virtual void slotToggleStatusBar(); + + /** + * Changes the statusbar contents for the standard label permanently, + * used to indicate current actions. + * + * @param text the text that is displayed in the statusbar + */ + virtual void slotStatusMsg(const QString &text); + + /** + * Changes the status message of the whole statusbar for two + * seconds, then restores the last status. This is used to display + * statusbar messages that give information about actions for + * toolbar icons and menuentries. + * + * @param text the text that is displayed in the statusbar + */ + virtual void slotStatusHelpMsg(const QString &text); + + /** + * A command has happened; check the clipboard in case we + * need to change state + */ + virtual void slotTestClipboard(); + + /** + * Connected to this view's toolbar 'solo' button + */ + virtual void slotToggleSolo(); + + void slotStateChanged(const QString&, bool noReverse); + + virtual void slotOpenInMatrix(); + virtual void slotOpenInPercussionMatrix(); + virtual void slotOpenInNotation(); + virtual void slotOpenInEventList(); + + /** + * Set the start time of the current segment + */ + void slotSetSegmentStartTime(); + + /** + * Set the duration of the current segment + */ + void slotSetSegmentDuration(); + + /** + * Global composition updates from the main view (track selection, solo, etc...) + */ + virtual void slotCompositionStateUpdate(); + +protected: + + virtual void windowActivationChange(bool); + + virtual void paintEvent(QPaintEvent* e); + + /** + * @see #setInCtor + */ + virtual void closeEvent(QCloseEvent* e); + + /** + * ignore close events while we're in ctor + */ + void setOutOfCtor() { m_inCtor = false; } + + /** + * Check if we're still in ctor + */ + bool isInCtor() { return m_inCtor; } + + /** + * Set the current Notation tool (note inserter, rest inserter, eraser...) + * + * Called when the user selects a new item on one of the notation toolbars + * (notes toolbars, rests toolbars...) + */ + void setTool(EditTool*); + + /** + * read general Options again and initialize all variables like the recent file list + */ + virtual void readOptions(); + + /** + * create menus and toolbars + */ + virtual void setupActions(QString rcFileName, bool haveClipboard = true); + + /** + * setup status bar + */ + virtual void initStatusBar() = 0; + + /** + * Abstract method to get current segment + */ + virtual Segment *getCurrentSegment() = 0; + + /** + * Set the caption of the view's window + */ + virtual void updateViewCaption() = 0; + +protected slots: + /** + * save general Options like all bar positions and status as well + * as the geometry and the recent file list to the configuration + * file + */ + virtual void slotSaveOptions(); + virtual void slotConfigure(); + virtual void slotEditKeys(); + virtual void slotEditToolbars(); + virtual void slotUpdateToolbars(); + +protected: + QWidget* getCentralWidget() { return m_centralFrame; } + + void initSegmentRefreshStatusIds(); + + bool isCompositionModified(); + void setCompositionModified(bool); + + /** + * Returns true if all of the segments contain + * only rests and clefs events + */ + bool getSegmentsOnlyRestsAndClefs(); + + /// Convenience function around actionCollection()->action() + KToggleAction* getToggleAction(const QString& actionName); + + /** + * Make a widget visible depending on the state of a + * KToggleAction + */ + virtual void toggleWidget(QWidget* widget, const QString& toggleActionName); + + void setRCFileName(QString s) { m_rcFileName = s; } + QString getRCFileName() { return m_rcFileName; } + + /** + * Set the page index of the config dialog which corresponds to + * this editview + */ + void setConfigDialogPageIndex(int p) { m_configDialogPageIndex = p; } + int getConfigDialogPageIndex() { return m_configDialogPageIndex; } + + //--------------- Data members --------------------------------- + QString m_rcFileName; + + static std::set<int> m_viewNumberPool; + std::string makeViewLocalPropertyPrefix(); + int m_viewNumber; + std::string m_viewLocalPropertyPrefix; + + KConfig* m_config; + + RosegardenGUIDoc* m_doc; + std::vector<Segment *> m_segments; + std::vector<unsigned int> m_segmentsRefreshStatusIds; + + EditTool* m_tool; + EditToolBox* m_toolBox; + + KDockWidget *m_mainDockWidget; + QFrame *m_centralFrame; + QGridLayout *m_grid; + + unsigned int m_mainCol; + unsigned int m_compositionRefreshStatusId; + bool m_needUpdate; + + QPaintEvent *m_pendingPaintEvent; + bool m_havePendingPaintEvent; + static bool m_inPaintEvent; // true if _any_ edit view is in a paint event + + QAccel *m_accelerators; + + int m_configDialogPageIndex; + + bool m_inCtor; + + EditViewTimeSigNotifier *m_timeSigNotifier; +}; + + +} + +#endif |