From 55d5f2d38bfe7c9673a315bb5597c20675bfde99 Mon Sep 17 00:00:00 2001 From: Florian Jung Date: Wed, 10 Aug 2011 17:53:12 +0000 Subject: THIS IS JUST A PROOF OF CONCEPT arranger is now a MdiSubWin --- muse2/muse/app.cpp | 30 ++++++++++++------ muse2/muse/app.h | 4 +++ muse2/muse/arranger/arrangerview.cpp | 10 ++++-- muse2/muse/arranger/arrangerview.h | 1 + muse2/muse/cobject.cpp | 60 ++++++++++++++++++++++++++++++++++++ muse2/muse/cobject.h | 16 +++++++++- muse2/muse/midiedit/scoreedit.cpp | 1 + 7 files changed, 109 insertions(+), 13 deletions(-) (limited to 'muse2') diff --git a/muse2/muse/app.cpp b/muse2/muse/app.cpp index 53078d44..8f60cff5 100644 --- a/muse2/muse/app.cpp +++ b/muse2/muse/app.cpp @@ -14,6 +14,8 @@ #include #include #include +#include +#include #include "app.h" #include "master/lmaster.h" @@ -824,18 +826,26 @@ MusE::MusE(int argc, char** argv) : QMainWindow() //menu_ids[CMD_START_WHATSTHIS] = menu_help->insertItem(tr("What's &This?"), this, SLOT(whatsThis()), 0); + //--------------------------------------------------- + // Central Widget + //--------------------------------------------------- + + + mdiArea=new QMdiArea(this); + setCentralWidget(mdiArea); + + arrangerView = new ArrangerView(this); connect(arrangerView, SIGNAL(closed()), SLOT(arrangerClosed())); toplevels.push_back(Toplevel(Toplevel::ARRANGER, (unsigned long)(arrangerView), arrangerView)); arrangerView->hide(); arranger=arrangerView->getArranger(); - - - //--------------------------------------------------- - // Central Widget - //--------------------------------------------------- - - //TODO FINDMICHJETZT mdiarea erstellen und als central widget setzen! + + //QMdiSubWindow* subwin=new QMdiSubWindow(this); //FINDMICHJETZT + //subwin->setWidget(arrangerView); + //mdiArea->addSubWindow(subwin); + mdiArea->addSubWindow(arrangerView->createMdiWrapper()); + //--------------------------------------------------- // read list of "Recent Projects" //--------------------------------------------------- @@ -1021,7 +1031,7 @@ void MusE::loadProjectFile(const QString& name, bool songTemplate, bool loadAll) if (restartSequencer) seqStart(); - //visTracks->updateVisibleTracksButtons(); //TODO FINDMICHJETZT + arrangerView->updateVisibleTracksButtons(); progress->setValue(100); delete progress; progress=0; @@ -2128,7 +2138,7 @@ static void catchSignal(int sig) // some cmd's from pulldown menu //--------------------------------------------------------- -void MusE::cmd(int cmd) //FINDMICHJETZT +void MusE::cmd(int cmd) { switch(cmd) { case CMD_FOLLOW_NO: @@ -2731,7 +2741,7 @@ void MusE::updateConfiguration() //menuSettings->setAccel(shortcuts[SHRT_CONFIG_AUDIO_PORTS].key, menu_ids[CMD_CONFIG_AUDIO_PORTS]); //menu_help->setAccel(menu_ids[CMD_START_WHATSTHIS], shortcuts[SHRT_START_WHATSTHIS].key); - //arrangerView->updateShortcuts(); //FINDMICHJETZT is done via signal + //arrangerView->updateShortcuts(); //commented out by flo: is done via signal } diff --git a/muse2/muse/app.h b/muse2/muse/app.h index 9b46d6f7..51a494bf 100644 --- a/muse2/muse/app.h +++ b/muse2/muse/app.h @@ -14,6 +14,7 @@ #include + class QCloseEvent; class QFocusEvent; class QMainWindow; @@ -27,6 +28,7 @@ class QToolBar; class QToolButton; class QProgressDialog; class EditToolBar; +class QMdiArea; class Part; class PartList; @@ -98,6 +100,8 @@ class MusE : public QMainWindow QAction *editSongInfoAction; private: + QMdiArea* mdiArea; + // View Menu actions QAction *viewTransportAction, *viewBigtimeAction, *viewMixerAAction, *viewMixerBAction, *viewCliplistAction, *viewMarkerAction, *viewArrangerAction; diff --git a/muse2/muse/arranger/arrangerview.cpp b/muse2/muse/arranger/arrangerview.cpp index 46685ce6..e9ace563 100644 --- a/muse2/muse/arranger/arrangerview.cpp +++ b/muse2/muse/arranger/arrangerview.cpp @@ -626,7 +626,7 @@ void ArrangerView::readStatus(Xml& xml) } -void ArrangerView::cmd(int cmd) //FINDMICHJETZT +void ArrangerView::cmd(int cmd) { TrackList* tracks = song->tracks(); int l = song->lpos(); @@ -866,10 +866,16 @@ void ArrangerView::clipboardChanged() // selectionChanged //--------------------------------------------------------- -void ArrangerView::selectionChanged() //FINDMICHJETZT +void ArrangerView::selectionChanged() { //bool flag = arranger->isSingleSelection(); // -- Hmm, why only single? bool flag = arranger->selectionSize() > 0; // -- Test OK cut and copy. For muse2. Tim. editCutAction->setEnabled(flag); editCopyAction->setEnabled(flag); } + + +void ArrangerView::updateVisibleTracksButtons() +{ + visTracks->updateVisibleTracksButtons(); +} diff --git a/muse2/muse/arranger/arrangerview.h b/muse2/muse/arranger/arrangerview.h index 9c19a731..9f869402 100644 --- a/muse2/muse/arranger/arrangerview.h +++ b/muse2/muse/arranger/arrangerview.h @@ -122,6 +122,7 @@ class ArrangerView : public TopWin void clipboardChanged(); void selectionChanged(); void updateShortcuts(); + void updateVisibleTracksButtons(); }; diff --git a/muse2/muse/cobject.cpp b/muse2/muse/cobject.cpp index 22f675a3..d486abf0 100644 --- a/muse2/muse/cobject.cpp +++ b/muse2/muse/cobject.cpp @@ -10,6 +10,8 @@ #include "xml.h" #include "gui.h" +#include + //--------------------------------------------------------- // readStatus //--------------------------------------------------------- @@ -71,5 +73,63 @@ TopWin::TopWin(QWidget* parent, const char* name, // Allow multiple rows. Tim. //setDockNestingEnabled(true); setIconSize(ICON_SIZE); + + mdisubwin=NULL; } +void TopWin::hide() +{ + printf("HIDE SLOT: mdisubwin is %p\n",mdisubwin); //FINDMICH + if (mdisubwin) + mdisubwin->close(); + + QMainWindow::hide(); +} + +void TopWin::show() +{ + printf("SHOW SLOT: mdisubwin is %p\n",mdisubwin); //FINDMICH + if (mdisubwin) + mdisubwin->show(); + + QMainWindow::show(); +} + +void TopWin::setVisible(bool param) +{ + printf("SETVISIBLE SLOT (%i): mdisubwin is %p\n",(int)param, mdisubwin); //FINDMICH + if (mdisubwin) + { + if (param) + mdisubwin->show(); + else + mdisubwin->close(); + } + QMainWindow::setVisible(param); +} + +QMdiSubWindow* TopWin::createMdiWrapper() +{ + if (mdisubwin==NULL) + { + mdisubwin = new QMdiSubWindow(); + mdisubwin->setWidget(this); + } + + return mdisubwin; +} + +void TopWin::setFree() +{ + if (mdisubwin) + { + setParent(0); + mdisubwin->hide(); + delete mdisubwin; + } +} + +bool TopWin::isMdiWin() +{ + return (mdisubwin!=NULL); +} diff --git a/muse2/muse/cobject.h b/muse2/muse/cobject.h index 0ab509e8..3788fb8f 100644 --- a/muse2/muse/cobject.h +++ b/muse2/muse/cobject.h @@ -14,6 +14,7 @@ #include #include +class QMdiSubWindow; class Xml; //--------------------------------------------------------- @@ -27,8 +28,21 @@ class TopWin : public QMainWindow public: virtual void readStatus(Xml&); virtual void writeStatus(int, Xml&) const; + + virtual QMdiSubWindow* createMdiWrapper(); + bool isMdiWin(); + void setFree(); + TopWin(QWidget* parent=0, const char* name=0, Qt::WindowFlags f = Qt::Window); + + private: + QMdiSubWindow* mdisubwin; + + public slots: + virtual void hide(); + virtual void show(); + virtual void setVisible(bool); }; //--------------------------------------------------------- @@ -51,7 +65,7 @@ class Toplevel { ToplevelType type() const { return _type; } unsigned long object() const { return _object; } TopWin* cobject() const { return _cobject; } - + private: ToplevelType _type; unsigned long _object; diff --git a/muse2/muse/midiedit/scoreedit.cpp b/muse2/muse/midiedit/scoreedit.cpp index 1636cc5d..cc581965 100644 --- a/muse2/muse/midiedit/scoreedit.cpp +++ b/muse2/muse/midiedit/scoreedit.cpp @@ -4473,6 +4473,7 @@ void staff_t::update_part_indices() * o IMPORTANT: check new windowed arranger! * - do all signal connections work? * - are there any segfaults? + * o store window state for arranger, probably also for other stuff * * IMPORTANT TODO * o redo transport menu: offer "one beat" and "one bar" steps -- cgit v1.2.3