Refactor Workspace class

* Extract `WorkspacesManager` class that manages global interactions with workspaces (using static methods for now)
* Introduce `find` method
* Rewrite `workspaces()` method. Now, it returns const ref.
* Extract `initWorkspaces` method to manage updating workspaces clearer
This commit is contained in:
anatoly-os 2019-10-21 14:26:11 +02:00
parent c94866ab54
commit 88d6c46df2
9 changed files with 215 additions and 207 deletions

View file

@ -313,7 +313,7 @@ void MuseScore::showPalette(bool visible)
{
QAction* a = getAction("toggle-palette");
if (!paletteWidget) {
Workspace::currentWorkspace->read();
WorkspacesManager::currentWorkspace()->read();
preferencesChanged();
updateIcons();

View file

@ -522,15 +522,9 @@ void MuseScore::preferencesChanged(bool fromWorkspace)
playId->setEnabled(!noSeq && seq && seq->isRunning());
// change workspace
if (!fromWorkspace && preferences.getString(PREF_APP_WORKSPACE) != Workspace::currentWorkspace->name()) {
Workspace* workspace = 0;
for (Workspace* w: Workspace::workspaces()) {
if (w->name() == preferences.getString(PREF_APP_WORKSPACE)) {
workspace = w;
break;
}
}
if (!fromWorkspace && preferences.getString(PREF_APP_WORKSPACE) != WorkspacesManager::currentWorkspace()->name()) {
Workspace* workspace = WorkspacesManager::find(preferences.getString(PREF_APP_WORKSPACE));
if (workspace)
mscore->changeWorkspace(workspace);
}
@ -821,9 +815,9 @@ bool MuseScore::importExtension(QString path)
if (workspacesDir.exists() && !MScore::noGui) {
auto wsList = workspacesDir.entryInfoList(QStringList("*.workspace"), QDir::Files);
if (!wsList.isEmpty()) {
Workspace::refreshWorkspaces();
WorkspacesManager::refreshWorkspaces();
emit workspacesChanged();
changeWorkspace(Workspace::workspaces().last());
changeWorkspace(WorkspacesManager::workspaces().last());
}
}
return true;
@ -887,21 +881,18 @@ bool MuseScore::uninstallExtension(QString extensionId)
mscore->reloadInstrumentTemplates();
mscore->updateInstrumentDialog();
if (refreshWorkspaces) {
const auto& curWorkspaceName = Workspace::currentWorkspace->name();
Workspace::refreshWorkspaces();
const auto curWorkspaceName = WorkspacesManager::currentWorkspace()->name();
WorkspacesManager::refreshWorkspaces();
emit workspacesChanged();
auto ws = Workspace::workspaces();
auto ws = WorkspacesManager::workspaces();
//If current worksapce is alive, do nothing
//Select first available workspace in the list otherwise
bool curWorkspaceDisappeared = true;
for (auto workspace : ws) {
if (workspace->name() == curWorkspaceName) {
curWorkspaceDisappeared = false;
break;
}
}
bool curWorkspaceDisappeared = false;
if (WorkspacesManager::find(curWorkspaceName))
curWorkspaceDisappeared = true;
if (curWorkspaceDisappeared)
changeWorkspace(Workspace::workspaces().last());
changeWorkspace(WorkspacesManager::workspaces().last());
}
return true;
}
@ -2029,7 +2020,7 @@ void MuseScore::retranslate()
showMidiImportButton->setText(tr("Show MIDI import panel"));
Shortcut::retranslate();
Workspace::retranslate();
WorkspacesManager::retranslateAll();
if (paletteWorkspace)
paletteWorkspace->retranslate();
@ -4462,7 +4453,7 @@ void MuseScore::writeSettings()
settings.setValue("splitter", splitter->saveState());
settings.endGroup();
Workspace::currentWorkspace->save();
WorkspacesManager::currentWorkspace()->save();
if (keyEditor && keyEditor->dirty())
keyEditor->save();
if (chordStyleEditor)
@ -5446,8 +5437,8 @@ PaletteWorkspace* MuseScore::getPaletteWorkspace()
emptyModel->setParent(paletteWorkspace);
masterPaletteModel->setParent(paletteWorkspace);
if (Workspace::currentWorkspace)
connect(paletteWorkspace, &PaletteWorkspace::userPaletteChanged, Workspace::currentWorkspace, QOverload<>::of(&Workspace::setDirty), Qt::UniqueConnection);
if (WorkspacesManager::currentWorkspace())
connect(paletteWorkspace, &PaletteWorkspace::userPaletteChanged, WorkspacesManager::currentWorkspace(), QOverload<>::of(&Workspace::setDirty), Qt::UniqueConnection);
}
return paletteWorkspace;
@ -7661,7 +7652,7 @@ int main(int argc, char* av[])
#ifndef Q_OS_MAC
qApp->setWindowIcon(*icons[int(Icons::window_ICON)]);
#endif
Workspace::initWorkspace();
WorkspacesManager::initCurrentWorkspace();
}
mscore = new MuseScore();
@ -7690,10 +7681,10 @@ int main(int argc, char* av[])
setMscoreLocale(sw->language());
Workspace::writeGlobalToolBar();
Workspace::writeGlobalGUIState();
for (auto ws : Workspace::workspaces()) {
if (ws->name().compare(sw->workspace()) == 0)
mscore->changeWorkspace(ws, true);
}
Workspace* targetWorkspace = WorkspacesManager::find(sw->workspace());
if (targetWorkspace)
mscore->changeWorkspace(targetWorkspace, true);
preferences.setPreference(PREF_UI_APP_STARTUP_SHOWTOURS, sw->showTours());
delete sw;

View file

@ -1129,9 +1129,9 @@ void PreferenceDialog::apply()
MScore::defaultStyleForPartsHasChanged();
}
Workspace::retranslate();
preferences.setPreference(PREF_APP_WORKSPACE, Workspace::currentWorkspace->name());
mscore->changeWorkspace(Workspace::currentWorkspace);
WorkspacesManager::retranslateAll();
preferences.setPreference(PREF_APP_WORKSPACE, WorkspacesManager::currentWorkspace()->name());
mscore->changeWorkspace(WorkspacesManager::currentWorkspace());
emit mscore->workspacesChanged();
emit preferencesChanged();

View file

@ -146,7 +146,7 @@ StartupWizardPage3::StartupWizardPage3(QWidget* parent)
setTitle(tr("Workspace"));
QLabel* label = new QLabel(tr("Choose your workspace"), this);
QStringList workspaceList;
for (auto workspace : Workspace::workspaces())
for (auto workspace : WorkspacesManager::workspaces())
workspaceList.append(qApp->translate("workspace", workspace->name().toUtf8().constData()));
_workspaces = new QComboBox(this);
_workspaces->addItems(workspaceList);

View file

@ -76,8 +76,8 @@ ToolbarEditor::ToolbarEditor(QWidget* parent)
void ToolbarEditor::init()
{
QString name = Workspace::currentWorkspace->name();
bool writable = !Workspace::currentWorkspace->readOnly();
QString name = WorkspacesManager::currentWorkspace()->name();
bool writable = !WorkspacesManager::currentWorkspace()->readOnly();
if (!writable) {
name += " " + tr("(not changeable)");
}
@ -100,7 +100,7 @@ void ToolbarEditor::init()
void ToolbarEditor::accepted()
{
if (Workspace::currentWorkspace->readOnly())
if (WorkspacesManager::currentWorkspace()->readOnly())
return;
// Updates the toolbars
mscore->setNoteInputMenuEntries(*(new_toolbars->at(0)));
@ -109,7 +109,7 @@ void ToolbarEditor::accepted()
mscore->populateNoteInputMenu();
mscore->populateFileOperations();
mscore->populatePlaybackControls();
Workspace::currentWorkspace->setDirty(true);
WorkspacesManager::currentWorkspace()->setDirty(true);
}
//---------------------------------------------------------

View file

@ -32,11 +32,9 @@
namespace Ms {
bool Workspace::workspacesRead = false;
//std::unordered_map<std::string, QVariant> Workspace::localPreferences {};
Workspace* Workspace::currentWorkspace = nullptr;
QList<Workspace*> Workspace::_workspaces {};
bool WorkspacesManager::isWorkspacesListDirty = true;
Workspace* WorkspacesManager::m_currentWorkspace = nullptr;
QList<Workspace*> WorkspacesManager::m_workspaces {};
QList<QPair<QAction*, QString>> Workspace::actionToStringList {};
QList<QPair<QMenu* , QString>> Workspace::menuToStringList {};
@ -95,8 +93,8 @@ static QString defaultWorkspaceTranslatableName(const QString& editedWorkspaceNa
void MuseScore::undoWorkspace()
{
// TODO: make a separate session start backup?
Workspace::currentWorkspace->read();
Workspace::currentWorkspace->setDirty(false);
WorkspacesManager::currentWorkspace()->read();
WorkspacesManager::currentWorkspace()->setDirty(false);
}
//---------------------------------------------------------
@ -116,8 +114,7 @@ void MuseScore::showWorkspaceMenu()
}
menuWorkspaces->clear();
const QList<Workspace*> pl = Workspace::workspaces();
for (Workspace* p : pl) {
for (Workspace* p : WorkspacesManager::workspaces()) {
QAction* a = workspaces->addAction(qApp->translate("Ms::Workspace", p->name().toUtf8()));
a->setCheckable(true);
a->setData(p->path());
@ -131,12 +128,12 @@ void MuseScore::showWorkspaceMenu()
menuWorkspaces->addAction(a);
a = new QAction(tr("Edit"), this);
a->setDisabled(Workspace::currentWorkspace->readOnly());
a->setDisabled(WorkspacesManager::currentWorkspace()->readOnly());
connect(a, SIGNAL(triggered()), SLOT(editWorkspace()));
menuWorkspaces->addAction(a);
a = new QAction(tr("Delete"), this);
a->setDisabled(Workspace::currentWorkspace->readOnly());
a->setDisabled(WorkspacesManager::currentWorkspace()->readOnly());
connect(a, SIGNAL(triggered()), SLOT(deleteWorkspace()));
menuWorkspaces->addAction(a);
@ -156,13 +153,8 @@ void MuseScore::deleteWorkspace()
QAction* a = workspaces->checkedAction();
if (!a)
return;
Workspace* workspace = 0;
for (Workspace* p : Workspace::workspaces()) {
if (p->name() == a->text()) {
workspace = p;
break;
}
}
Workspace* workspace = WorkspacesManager::find(a->text());
if (!workspace)
return;
@ -176,12 +168,12 @@ void MuseScore::deleteWorkspace()
if (reply != QMessageBox::Yes)
return;
Workspace::workspaces().removeOne(workspace);
WorkspacesManager::remove(workspace->name());
QFile f(workspace->path());
f.remove();
delete workspace;
Workspace::currentWorkspace = Workspace::workspaces().first();
changeWorkspace(Workspace::currentWorkspace);
WorkspacesManager::setCurrentWorkspace(WorkspacesManager::workspaces().first());
changeWorkspace(WorkspacesManager::currentWorkspace());
updateIcons();
}
@ -200,7 +192,7 @@ void MuseScore::changeWorkspace(QAction* a)
void MuseScore::changeWorkspace(const QString& name)
{
for (Workspace* p :Workspace::workspaces()) {
for (Workspace* p : WorkspacesManager::workspaces()) {
if (qApp->translate("Ms::Workspace", p->name().toUtf8()) == name) {
changeWorkspace(p);
return;
@ -216,20 +208,20 @@ void MuseScore::changeWorkspace(const QString& name)
void MuseScore::changeWorkspace(Workspace* p, bool first)
{
if (!first) {
Workspace::currentWorkspace->save();
if (Workspace::currentWorkspace)
disconnect(getPaletteWorkspace(), &PaletteWorkspace::userPaletteChanged, Workspace::currentWorkspace, QOverload<>::of(&Workspace::setDirty));
WorkspacesManager::currentWorkspace()->save();
if (WorkspacesManager::currentWorkspace())
disconnect(getPaletteWorkspace(), &PaletteWorkspace::userPaletteChanged, WorkspacesManager::currentWorkspace(), QOverload<>::of(&Workspace::setDirty));
}
p->read();
Workspace::currentWorkspace = p;
WorkspacesManager::setCurrentWorkspace(p);
if (!first) {
updateIcons();
preferencesChanged(true);
}
connect(getPaletteWorkspace(), &PaletteWorkspace::userPaletteChanged, Workspace::currentWorkspace, QOverload<>::of(&Workspace::setDirty), Qt::UniqueConnection);
connect(getPaletteWorkspace(), &PaletteWorkspace::userPaletteChanged, WorkspacesManager::currentWorkspace(), QOverload<>::of(&Workspace::setDirty), Qt::UniqueConnection);
preferences.setPreference(PREF_APP_WORKSPACE, p->name());
emit mscore->workspacesChanged();
@ -262,17 +254,13 @@ void MuseScore::updateIcons()
// initWorkspace
//---------------------------------------------------------
void Workspace::initWorkspace()
void WorkspacesManager::initCurrentWorkspace()
{
for (Workspace* p : Workspace::workspaces()) {
if (p->name() == preferences.getString(PREF_APP_WORKSPACE)) {
currentWorkspace = p;
break;
}
}
Q_ASSERT(!Workspace::workspaces().empty());
if (currentWorkspace == 0)
currentWorkspace = Workspace::workspaces().at(0);
initWorkspaces();
m_currentWorkspace = find(preferences.getString(PREF_APP_WORKSPACE));
Q_ASSERT(!workspaces().empty());
if (m_currentWorkspace == 0)
m_currentWorkspace = workspaces().at(0);
}
//---------------------------------------------------------
@ -309,7 +297,7 @@ Workspace::Workspace()
/// creating all the necessary directories.
//---------------------------------------------------------
QString Workspace::makeUserWorkspacePath(const QString& name)
QString WorkspacesManager::makeUserWorkspacePath(const QString& name)
{
const QString ext(".workspace");
QDir dir;
@ -327,7 +315,7 @@ QString Workspace::makeUserWorkspacePath(const QString& name)
void Workspace::write()
{
if (_path.isEmpty())
_path = Workspace::makeUserWorkspacePath(_name);
_path = WorkspacesManager::makeUserWorkspacePath(_name);
MQZipWriter f(_path);
f.setCreationPermissions(
@ -622,7 +610,7 @@ extern QString readRootFile(MQZipReader*, QList<QString>&);
// read
//---------------------------------------------------------
void Workspace::readWorkspaceFile(const QString& path, std::function<void(XmlReader&)> readWorkspace)
void WorkspacesManager::readWorkspaceFile(const QString& path, std::function<void(XmlReader&)> readWorkspace)
{
MQZipReader f(path);
QList<QString> images;
@ -671,13 +659,13 @@ void Workspace::read()
preferences.updateLocalPreferences();
readWorkspaceFile(_path, [this](XmlReader& e) { read(e); });
WorkspacesManager::readWorkspaceFile(_path, [this](XmlReader& e) { read(e); });
}
std::unique_ptr<PaletteTree> Workspace::getPaletteTree() const
{
std::unique_ptr<PaletteTree> paletteTree(new PaletteTree);
readWorkspaceFile(_path, [&](XmlReader& e) {
WorkspacesManager::readWorkspaceFile(_path, [&](XmlReader& e) {
while (e.readNextStartElement()) {
if (e.name() == "PaletteBox")
paletteTree->read(e);
@ -1047,7 +1035,7 @@ void Workspace::ensureWorkspaceSaved()
else
setName(tr(translatableName().toUtf8()));
_path = Workspace::makeUserWorkspacePath(translatableName().isEmpty() ? name() : translatableName());
_path = WorkspacesManager::makeUserWorkspacePath(translatableName().isEmpty() ? name() : translatableName());
write();
@ -1120,98 +1108,97 @@ static QStringList findWorkspaceFiles()
// workspaces
//---------------------------------------------------------
QList<Workspace*>& Workspace::workspaces()
void WorkspacesManager::initWorkspaces()
{
if (!workspacesRead) {
QList<Workspace*> oldWorkspaces(_workspaces);
QList<Workspace*> editedWorkpaces;
for (const QString& path : findWorkspaceFiles()) {
Workspace* p = 0;
QFileInfo fi(path);
QString name(fi.completeBaseName());
if (!isWorkspacesListDirty)
return;
QList<Workspace*> oldWorkspaces(m_workspaces);
QList<Workspace*> editedWorkpaces;
for (const QString& path : findWorkspaceFiles()) {
Workspace* p = 0;
QFileInfo fi(path);
QString name(fi.completeBaseName());
const bool isDefault = std::find(defaultWorkspaces.begin(), defaultWorkspaces.end(), name) != defaultWorkspaces.end();
const bool isEditedDefault = std::find(defaultEditedWorkpaces.begin(), defaultEditedWorkpaces.end(), name) != defaultEditedWorkpaces.end();
const bool isDefault = std::find(defaultWorkspaces.begin(), defaultWorkspaces.end(), name) != defaultWorkspaces.end();
const bool isEditedDefault = std::find(defaultEditedWorkpaces.begin(), defaultEditedWorkpaces.end(), name) != defaultEditedWorkpaces.end();
const bool translate = isDefault || isEditedDefault;
const bool translate = isDefault || isEditedDefault;
for (Workspace* w : _workspaces) {
if (w->name() == name || (translate && w->translatableName() == name)) {
p = w;
break;
}
}
if (p)
oldWorkspaces.removeOne(p);
else {
p = new Workspace;
_workspaces.append(p);
}
p->setPath(path);
p->setName(name);
if (translate)
p->setTranslatableName(name);
p->setReadOnly(!fi.isWritable());
if (isEditedDefault)
editedWorkpaces.push_back(p);
}
for (Workspace* old : oldWorkspaces)
_workspaces.removeOne(old);
// Delete default workspaces if there are corresponding user-edited ones
for (Workspace* ew : editedWorkpaces) {
const QString uneditedName = defaultWorkspaceTranslatableName(ew->translatableName());
if (uneditedName.isEmpty())
continue;
for (auto it = _workspaces.begin(); it != _workspaces.end(); ++it) {
Workspace* w = *it;
if (w->translatableName() == uneditedName) {
_workspaces.erase(it);
delete w;
break;
}
}
}
if (_workspaces.empty())
qFatal("No workspaces found");
if (oldWorkspaces.contains(Workspace::currentWorkspace))
Workspace::currentWorkspace = _workspaces.first();
qDeleteAll(oldWorkspaces);
// hack
for (int i = 0; i < _workspaces.size(); i++) {
const QString& trName = _workspaces[i]->translatableName();
if (trName == defaultWorkspaces[0] || trName == defaultEditedWorkpaces[0]) {
_workspaces.move(i, 0);
for (Workspace* w : m_workspaces) {
if (w->name() == name || (translate && w->translatableName() == name)) {
p = w;
break;
}
}
retranslate(&_workspaces);
workspacesRead = true;
if (p)
oldWorkspaces.removeOne(p);
else {
p = new Workspace;
m_workspaces.append(p);
}
p->setPath(path);
p->setName(name);
if (translate)
p->setTranslatableName(name);
p->setReadOnly(!fi.isWritable());
if (isEditedDefault)
editedWorkpaces.push_back(p);
}
return _workspaces;
for (Workspace* old : oldWorkspaces)
m_workspaces.removeOne(old);
// Delete default workspaces if there are corresponding user-edited ones
for (Workspace* ew : editedWorkpaces) {
const QString uneditedName = defaultWorkspaceTranslatableName(ew->translatableName());
if (uneditedName.isEmpty())
continue;
for (auto it = m_workspaces.begin(); it != m_workspaces.end(); ++it) {
Workspace* w = *it;
if (w->translatableName() == uneditedName) {
m_workspaces.erase(it);
delete w;
break;
}
}
}
if (m_workspaces.empty())
qFatal("No workspaces found");
if (oldWorkspaces.contains(WorkspacesManager::currentWorkspace()))
WorkspacesManager::setCurrentWorkspace(m_workspaces.first());
qDeleteAll(oldWorkspaces);
// hack
for (int i = 0; i < m_workspaces.size(); i++) {
const QString& trName = m_workspaces[i]->translatableName();
if (trName == defaultWorkspaces[0] || trName == defaultEditedWorkpaces[0]) {
m_workspaces.move(i, 0);
break;
}
}
retranslate(m_workspaces);
isWorkspacesListDirty = false;
}
//---------------------------------------------------------
// refreshWorkspaces
//---------------------------------------------------------
QList<Workspace*>& Workspace::refreshWorkspaces()
void WorkspacesManager::refreshWorkspaces()
{
workspacesRead = false;
return workspaces();
isWorkspacesListDirty = true;
initWorkspaces();
}
const Workspace* Workspace::sourceWorkspace() const
@ -1221,33 +1208,34 @@ const Workspace* Workspace::sourceWorkspace() const
if (translatableName() == sourceName || name() == sourceName)
return this;
for (const Workspace* w : workspaces()) {
for (const Workspace* w : WorkspacesManager::workspaces()) {
if (w->translatableName() == sourceName || w->name() == sourceName)
return w;
}
return workspaces()[0];
return WorkspacesManager::workspaces()[0];
}
//---------------------------------------------------------
// retranslate
//---------------------------------------------------------
void Workspace::retranslate(QList<Workspace*>* workspacesList)
void WorkspacesManager::retranslate(QList<Workspace*>& workspacesList)
{
if (!workspacesList)
workspacesList = &workspaces();
for (auto w : *workspacesList) {
if (!w->translatableName().isEmpty())
w->setName(tr(w->translatableName().toLatin1().constData()));
for (auto w : workspacesList) {
if (!w->translatableName().isEmpty()) {
auto transName = qApp->translate("Ms::Workspace", w->translatableName().toLatin1().constData());
w->setName(transName);
}
}
}
void WorkspacesManager::retranslateAll()
{
retranslate(m_workspaces);
}
//---------------------------------------------------------
// createNewWorkspace
//---------------------------------------------------------
Workspace* Workspace::createNewWorkspace(const QString& name)
Workspace* WorkspacesManager::createNewWorkspace(const QString& name)
{
Workspace* w = new Workspace;
w->setName(name);
@ -1256,7 +1244,7 @@ Workspace* Workspace::createNewWorkspace(const QString& name)
w->setReadOnly(false);
w->write();
_workspaces.append(w);
m_workspaces.append(w);
return w;
}
@ -1376,7 +1364,7 @@ QString Workspace::findStringFromMenu(QMenu* menu)
void Workspace::rename(const QString& s)
{
const QString newPath = Workspace::makeUserWorkspacePath(s);
const QString newPath = WorkspacesManager::makeUserWorkspacePath(s);
QFile file(_path);
if (file.exists())

View file

@ -31,11 +31,9 @@ class XmlWriter;
//---------------------------------------------------------
// Workspace
//---------------------------------------------------------
class Workspace : public QObject {
Q_OBJECT
static QList<Workspace*> _workspaces;
static QList<QPair<QAction*, QString>> actionToStringList;
static QList<QPair<QMenu*, QString>> menuToStringList;
@ -66,9 +64,6 @@ class Workspace : public QObject {
void readGlobalMenuBar();
void readGlobalGUIState();
static QString makeUserWorkspacePath(const QString& name);
static void readWorkspaceFile(const QString& path, std::function<void(XmlReader&)> readWorkspace);
private slots:
void ensureWorkspaceSaved();
@ -97,13 +92,6 @@ class Workspace : public QObject {
bool readOnly() const { return _readOnly; }
void setReadOnly(bool val) { _readOnly = val; }
static void initWorkspace();
static Workspace* currentWorkspace;
static QList<Workspace*>& workspaces();
static Workspace* createNewWorkspace(const QString& name);
static bool workspacesRead;
static QList<Workspace*>& refreshWorkspaces();
const Workspace* sourceWorkspace() const;
std::unique_ptr<PaletteTree> getPaletteTree() const;
@ -123,8 +111,49 @@ class Workspace : public QObject {
static void writeGlobalMenuBar(QMenuBar* mb);
static void writeGlobalToolBar();
static void writeGlobalGUIState();
};
static void retranslate(QList<Workspace*>* workspacesList = 0);
class WorkspacesManager {
private:
static void initWorkspaces();
public:
static Workspace* createNewWorkspace(const QString& name);
static void refreshWorkspaces();
static QString makeUserWorkspacePath(const QString& name);
static void readWorkspaceFile(const QString& path, std::function<void(XmlReader&)> readWorkspace);
static void retranslate(QList<Workspace*>& workspacesList);
static void retranslateAll();
static Workspace* find(const QString& name) {
for (auto w : m_workspaces) {
if (w->name() == name)
return w;
}
return nullptr;
}
static void remove(const QString& name) {
m_workspaces.removeOne(find(name));
}
static const QList<Workspace*>& workspaces() {
if (isWorkspacesListDirty)
initWorkspaces();
return m_workspaces;
}
//replace with `const Workspace*` in future
static Workspace* currentWorkspace() { return m_currentWorkspace; }
static void setCurrentWorkspace(Workspace* currWorkspace) { m_currentWorkspace = currWorkspace; }
static void initCurrentWorkspace();
private:
static QList<Workspace*> m_workspaces;
static Workspace* m_currentWorkspace;
static bool isWorkspacesListDirty;
};
}

View file

@ -76,7 +76,7 @@ void WorkspaceComboBox::updateWorkspaces()
return;
clear();
const QList<Workspace*> pl = Workspace::workspaces();
const QList<Workspace*> pl = WorkspacesManager::workspaces();
int idx = 0;
int curIdx = -1;
for (Workspace* p : pl) {
@ -103,8 +103,8 @@ void WorkspaceComboBox::workspaceSelected(int idx)
if (idx < 0)
return;
Workspace* w = Workspace::workspaces().at(idx);
if (w != Workspace::currentWorkspace) {
Workspace* w = WorkspacesManager::workspaces().at(idx);
if (w != WorkspacesManager::currentWorkspace()) {
blockUpdateWorkspaces = true;
_mscore->changeWorkspace(w);
blockUpdateWorkspaces = false;

View file

@ -37,7 +37,7 @@ void MuseScore::createNewWorkspace()
void MuseScore::editWorkspace()
{
if (!Workspace::currentWorkspace && !Workspace::currentWorkspace->readOnly())
if (!WorkspacesManager::currentWorkspace() && !WorkspacesManager::currentWorkspace()->readOnly())
return;
if (!_workspaceDialog)
_workspaceDialog = new WorkspaceDialog();
@ -73,11 +73,11 @@ void WorkspaceDialog::display()
{
// TODO: clear search box?
if (editMode) {
componentsCheck->setChecked(Workspace::currentWorkspace->getSaveComponents());
toolbarsCheck->setChecked(Workspace::currentWorkspace->getSaveToolbars());
menubarCheck->setChecked(Workspace::currentWorkspace->getSaveMenuBar());
componentsCheck->setChecked(WorkspacesManager::currentWorkspace()->getSaveComponents());
toolbarsCheck->setChecked(WorkspacesManager::currentWorkspace()->getSaveToolbars());
menubarCheck->setChecked(WorkspacesManager::currentWorkspace()->getSaveMenuBar());
prefsCheck->setChecked(preferences.getUseLocalPreferences());
nameLineEdit->setText(Workspace::currentWorkspace->name());
nameLineEdit->setText(WorkspacesManager::currentWorkspace()->name());
setWindowTitle(tr("Edit Workspace"));
}
else {
@ -103,10 +103,10 @@ void WorkspaceDialog::accepted()
s = s.replace( QRegExp( "[" + QRegExp::escape( "\\/:*?\"<>|" ) + "]" ), "_" ); //FAT/NTFS special chars
for (;;) {
if (editMode && s == Workspace::currentWorkspace->name())
if (editMode && s == WorkspacesManager::currentWorkspace()->name())
break;
bool notFound = true;
for (Workspace* p : Workspace::workspaces()) {
for (Workspace* p : WorkspacesManager::workspaces()) {
if ((qApp->translate("Ms::Workspace", p->name().toUtf8()).toLower() == s.toLower())) {
notFound = false;
break;
@ -126,22 +126,22 @@ void WorkspaceDialog::accepted()
}
if (!editMode) {
if (Workspace::currentWorkspace->dirty())
Workspace::currentWorkspace->save();
Workspace::currentWorkspace = Workspace::createNewWorkspace(s);
if (WorkspacesManager::currentWorkspace()->dirty())
WorkspacesManager::currentWorkspace()->save();
WorkspacesManager::setCurrentWorkspace(WorkspacesManager::createNewWorkspace(s));
preferences.updateLocalPreferences();
}
Workspace::currentWorkspace->setSaveComponents(componentsCheck->isChecked());
Workspace::currentWorkspace->setSaveToolbars(toolbarsCheck->isChecked());
Workspace::currentWorkspace->setSaveMenuBar(menubarCheck->isChecked());
WorkspacesManager::currentWorkspace()->setSaveComponents(componentsCheck->isChecked());
WorkspacesManager::currentWorkspace()->setSaveToolbars(toolbarsCheck->isChecked());
WorkspacesManager::currentWorkspace()->setSaveMenuBar(menubarCheck->isChecked());
preferences.setUseLocalPreferences(prefsCheck->isChecked());
Workspace::currentWorkspace->save();
WorkspacesManager::currentWorkspace()->save();
if (editMode && Workspace::currentWorkspace->name() != s)
Workspace::currentWorkspace->rename(s);
if (editMode && WorkspacesManager::currentWorkspace()->name() != s)
WorkspacesManager::currentWorkspace()->rename(s);
preferences.setPreference(PREF_APP_WORKSPACE, Workspace::currentWorkspace->name());
preferences.setPreference(PREF_APP_WORKSPACE, WorkspacesManager::currentWorkspace()->name());
emit mscore->workspacesChanged();
close();
}