diff --git a/src/app/commands/cmd_advanced_mode.cpp b/src/app/commands/cmd_advanced_mode.cpp index cc4754680..d05639ad4 100644 --- a/src/app/commands/cmd_advanced_mode.cpp +++ b/src/app/commands/cmd_advanced_mode.cpp @@ -55,10 +55,24 @@ void AdvancedModeCommand::onExecute(Context* context) { // Switch advanced mode. MainWindow* mainWindow = App::instance()->getMainWindow(); - bool advancedMode = !mainWindow->isAdvancedMode(); - mainWindow->setAdvancedMode(advancedMode); + MainWindow::Mode oldMode = mainWindow->getMode(); + MainWindow::Mode newMode = oldMode; - if (advancedMode && + switch (oldMode) { + case MainWindow::NormalMode: + newMode = MainWindow::ContextBarAndTimelineMode; + break; + case MainWindow::ContextBarAndTimelineMode: + newMode = MainWindow::EditorOnlyMode; + break; + case MainWindow::EditorOnlyMode: + newMode = MainWindow::NormalMode; + break; + } + + mainWindow->setMode(newMode); + + if (oldMode == MainWindow::NormalMode && get_config_bool("AdvancedMode", "Warning", true)) { Accelerator* accel = get_accel_to_execute_command(short_name()); if (accel != NULL) { diff --git a/src/app/ui/main_window.cpp b/src/app/ui/main_window.cpp index d0ccb9703..b3c6fea24 100644 --- a/src/app/ui/main_window.cpp +++ b/src/app/ui/main_window.cpp @@ -1,5 +1,5 @@ /* Aseprite - * Copyright (C) 2001-2013 David Capello + * Copyright (C) 2001-2014 David Capello * * 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 @@ -56,7 +56,7 @@ MainWindow::MainWindow() : Window(DesktopWindow) , m_lastSplitterPos(0.0) , m_lastTimelineSplitterPos(75.0) - , m_advancedMode(false) + , m_mode(NormalMode) , m_startView(NULL) { setId("main_window"); @@ -146,27 +146,35 @@ void MainWindow::reloadMenus() invalidate(); } -void MainWindow::setAdvancedMode(bool advanced) +void MainWindow::setMode(Mode mode) { // Check if we already are in the given mode. - if (m_advancedMode == advanced) + if (m_mode == mode) return; - m_advancedMode = advanced; - - if (m_advancedMode) { + if (mode == NormalMode) { + if (m_colorBarSplitter->getPosition() == 0.0) + m_colorBarSplitter->setPosition(m_lastSplitterPos); + } + // If current mode is "normal", we save the splitter position of the + // color bar in "m_lastSplitterPos" before we hide it. + else if (m_mode == NormalMode) { m_lastSplitterPos = m_colorBarSplitter->getPosition(); m_colorBarSplitter->setPosition(0.0); } - else if (m_colorBarSplitter->getPosition() == 0.0) - m_colorBarSplitter->setPosition(m_lastSplitterPos); - m_menuBar->setVisible(!advanced); - m_tabsBar->setVisible(!advanced); - m_toolBar->setVisible(!advanced); - m_statusBar->setVisible(!advanced); - m_contextBar->setVisible(!advanced); + m_menuBar->setVisible(mode == NormalMode); + m_tabsBar->setVisible(mode == NormalMode); + m_toolBar->setVisible(mode == NormalMode); + m_statusBar->setVisible(mode == NormalMode); + m_contextBar->setVisible( + mode == NormalMode || + mode == ContextBarAndTimelineMode); + setTimelineVisibility( + mode == NormalMode || + mode == ContextBarAndTimelineMode); + m_mode = mode; layout(); } @@ -232,12 +240,15 @@ void MainWindow::onActiveViewChange() m_contextBar->updateFromTool(UIContext::instance() ->getSettings()->getCurrentTool()); - m_contextBar->setVisible(true); + + if (m_mode != EditorOnlyMode) + m_contextBar->setVisible(true); } else { UIContext::instance()->setActiveView(NULL); - m_contextBar->setVisible(false); + if (m_mode != EditorOnlyMode) + m_contextBar->setVisible(false); } layout(); } diff --git a/src/app/ui/main_window.h b/src/app/ui/main_window.h index b36b266db..89e3ffc06 100644 --- a/src/app/ui/main_window.h +++ b/src/app/ui/main_window.h @@ -1,5 +1,5 @@ /* Aseprite - * Copyright (C) 2001-2013 David Capello + * Copyright (C) 2001-2014 David Capello * * 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 @@ -41,6 +41,12 @@ namespace app { class MainWindow : public ui::Window , public TabsDelegate { public: + enum Mode { + NormalMode, + ContextBarAndTimelineMode, + EditorOnlyMode + }; + MainWindow(); ~MainWindow(); @@ -54,8 +60,8 @@ namespace app { void start(); void reloadMenus(); - bool isAdvancedMode() const { return m_advancedMode; } - void setAdvancedMode(bool advanced); + Mode getMode() const { return m_mode; } + void setMode(Mode mode); bool getTimelineVisibility() const; void setTimelineVisibility(bool visible); @@ -81,7 +87,7 @@ namespace app { Tabs* m_tabsBar; double m_lastSplitterPos; double m_lastTimelineSplitterPos; - bool m_advancedMode; + Mode m_mode; Timeline* m_timeline; Workspace* m_workspace; MiniEditorWindow* m_miniEditor;