mirror of
https://github.com/aseprite/aseprite.git
synced 2025-04-10 03:44:16 +00:00
Add "View > Duplicate View" to create multiple views of the same document
This commit is contained in:
parent
b38f116da9
commit
7448db3959
@ -569,6 +569,8 @@
|
|||||||
<item command="SaveMask" text="&Save to MSK file" />
|
<item command="SaveMask" text="&Save to MSK file" />
|
||||||
</menu>
|
</menu>
|
||||||
<menu text="&View">
|
<menu text="&View">
|
||||||
|
<item command="DuplicateView" text="Duplicate &View" />
|
||||||
|
<separator />
|
||||||
<item command="ShowPixelGrid" text="Show &Pixel Grid" />
|
<item command="ShowPixelGrid" text="Show &Pixel Grid" />
|
||||||
<item command="ShowGrid" text="Show &Grid" />
|
<item command="ShowGrid" text="Show &Grid" />
|
||||||
<item command="SnapToGrid" text="&Snap to Grid" />
|
<item command="SnapToGrid" text="&Snap to Grid" />
|
||||||
@ -628,6 +630,7 @@
|
|||||||
|
|
||||||
<menu id="document_tab_popup">
|
<menu id="document_tab_popup">
|
||||||
<item command="CloseFile" text="&Close" />
|
<item command="CloseFile" text="&Close" />
|
||||||
|
<item command="DuplicateView" text="Duplicate &View" />
|
||||||
<separator />
|
<separator />
|
||||||
<item command="OpenWithApp" text="&Open with OS" />
|
<item command="OpenWithApp" text="&Open with OS" />
|
||||||
<item command="OpenInFolder" text="Open in &Folder" />
|
<item command="OpenInFolder" text="Open in &Folder" />
|
||||||
|
@ -146,6 +146,7 @@ add_library(app-lib
|
|||||||
commands/cmd_developer_console.cpp
|
commands/cmd_developer_console.cpp
|
||||||
commands/cmd_duplicate_layer.cpp
|
commands/cmd_duplicate_layer.cpp
|
||||||
commands/cmd_duplicate_sprite.cpp
|
commands/cmd_duplicate_sprite.cpp
|
||||||
|
commands/cmd_duplicate_view.cpp
|
||||||
commands/cmd_exit.cpp
|
commands/cmd_exit.cpp
|
||||||
commands/cmd_export_sprite_sheet.cpp
|
commands/cmd_export_sprite_sheet.cpp
|
||||||
commands/cmd_eyedropper.cpp
|
commands/cmd_eyedropper.cpp
|
||||||
|
58
src/app/commands/cmd_duplicate_view.cpp
Normal file
58
src/app/commands/cmd_duplicate_view.cpp
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
// Aseprite
|
||||||
|
// Copyright (C) 2001-2015 David Capello
|
||||||
|
//
|
||||||
|
// This program is free software; you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License version 2 as
|
||||||
|
// published by the Free Software Foundation.
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include "config.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "app/commands/command.h"
|
||||||
|
|
||||||
|
#include "app/app.h"
|
||||||
|
#include "app/ui/main_window.h"
|
||||||
|
#include "app/ui/workspace.h"
|
||||||
|
|
||||||
|
#include <cstdio>
|
||||||
|
|
||||||
|
namespace app {
|
||||||
|
|
||||||
|
// using namespace ui;
|
||||||
|
|
||||||
|
class DuplicateViewCommand : public Command {
|
||||||
|
public:
|
||||||
|
DuplicateViewCommand();
|
||||||
|
Command* clone() const override { return new DuplicateViewCommand(*this); }
|
||||||
|
|
||||||
|
protected:
|
||||||
|
bool onEnabled(Context* context) override;
|
||||||
|
void onExecute(Context* context) override;
|
||||||
|
};
|
||||||
|
|
||||||
|
DuplicateViewCommand::DuplicateViewCommand()
|
||||||
|
: Command("DuplicateView",
|
||||||
|
"Duplicate View",
|
||||||
|
CmdUIOnlyFlag)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
bool DuplicateViewCommand::onEnabled(Context* context)
|
||||||
|
{
|
||||||
|
Workspace* workspace = App::instance()->getMainWindow()->getWorkspace();
|
||||||
|
WorkspaceView* view = workspace->activeView();
|
||||||
|
return (view != nullptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DuplicateViewCommand::onExecute(Context* context)
|
||||||
|
{
|
||||||
|
App::instance()->getMainWindow()->getWorkspace()->duplicateActiveView();
|
||||||
|
}
|
||||||
|
|
||||||
|
Command* CommandFactory::createDuplicateViewCommand()
|
||||||
|
{
|
||||||
|
return new DuplicateViewCommand;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace app
|
@ -31,6 +31,7 @@ FOR_EACH_COMMAND(Despeckle)
|
|||||||
FOR_EACH_COMMAND(DeveloperConsole)
|
FOR_EACH_COMMAND(DeveloperConsole)
|
||||||
FOR_EACH_COMMAND(DuplicateLayer)
|
FOR_EACH_COMMAND(DuplicateLayer)
|
||||||
FOR_EACH_COMMAND(DuplicateSprite)
|
FOR_EACH_COMMAND(DuplicateSprite)
|
||||||
|
FOR_EACH_COMMAND(DuplicateView)
|
||||||
FOR_EACH_COMMAND(Exit)
|
FOR_EACH_COMMAND(Exit)
|
||||||
FOR_EACH_COMMAND(ExportSpriteSheet)
|
FOR_EACH_COMMAND(ExportSpriteSheet)
|
||||||
FOR_EACH_COMMAND(Eyedropper)
|
FOR_EACH_COMMAND(Eyedropper)
|
||||||
|
@ -110,6 +110,7 @@ void DevConsoleView::onWorkspaceViewSelected()
|
|||||||
|
|
||||||
void DevConsoleView::onClonedFrom(WorkspaceView* from)
|
void DevConsoleView::onClonedFrom(WorkspaceView* from)
|
||||||
{
|
{
|
||||||
|
// Do nothing
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DevConsoleView::onCloseView(Workspace* workspace)
|
bool DevConsoleView::onCloseView(Workspace* workspace)
|
||||||
|
@ -231,6 +231,17 @@ void DocumentView::onClonedFrom(WorkspaceView* from)
|
|||||||
|
|
||||||
bool DocumentView::onCloseView(Workspace* workspace)
|
bool DocumentView::onCloseView(Workspace* workspace)
|
||||||
{
|
{
|
||||||
|
// If there is another view for this document, just close the view.
|
||||||
|
for (auto view : *workspace) {
|
||||||
|
DocumentView* docView = dynamic_cast<DocumentView*>(view);
|
||||||
|
if (docView && docView != this &&
|
||||||
|
docView->getDocument() == getDocument()) {
|
||||||
|
workspace->removeView(this);
|
||||||
|
delete this;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
UIContext* ctx = UIContext::instance();
|
UIContext* ctx = UIContext::instance();
|
||||||
bool save_it;
|
bool save_it;
|
||||||
bool try_again = true;
|
bool try_again = true;
|
||||||
|
@ -69,7 +69,7 @@ TabIcon HomeView::getTabIcon()
|
|||||||
|
|
||||||
WorkspaceView* HomeView::cloneWorkspaceView()
|
WorkspaceView* HomeView::cloneWorkspaceView()
|
||||||
{
|
{
|
||||||
return NULL; // This view cannot be cloned
|
return nullptr; // This view cannot be cloned
|
||||||
}
|
}
|
||||||
|
|
||||||
void HomeView::onClonedFrom(WorkspaceView* from)
|
void HomeView::onClonedFrom(WorkspaceView* from)
|
||||||
|
@ -116,6 +116,22 @@ void Workspace::selectPreviousTab()
|
|||||||
m_activePanel->tabs()->selectPreviousTab();
|
m_activePanel->tabs()->selectPreviousTab();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Workspace::duplicateActiveView()
|
||||||
|
{
|
||||||
|
WorkspaceView* view = activeView();
|
||||||
|
if (!view)
|
||||||
|
return;
|
||||||
|
|
||||||
|
WorkspaceView* clone = view->cloneWorkspaceView();
|
||||||
|
if (!clone)
|
||||||
|
return;
|
||||||
|
|
||||||
|
WorkspacePanel* panel = getViewPanel(view);
|
||||||
|
addViewToPanel(panel, clone, false, -1);
|
||||||
|
clone->onClonedFrom(view);
|
||||||
|
setActiveView(clone);
|
||||||
|
}
|
||||||
|
|
||||||
void Workspace::onPaint(PaintEvent& ev)
|
void Workspace::onPaint(PaintEvent& ev)
|
||||||
{
|
{
|
||||||
ev.getGraphics()->fillRect(getBgColor(), getClientBounds());
|
ev.getGraphics()->fillRect(getBgColor(), getClientBounds());
|
||||||
|
@ -43,6 +43,7 @@ namespace app {
|
|||||||
void setMainPanelAsActive();
|
void setMainPanelAsActive();
|
||||||
void selectNextTab();
|
void selectNextTab();
|
||||||
void selectPreviousTab();
|
void selectPreviousTab();
|
||||||
|
void duplicateActiveView();
|
||||||
|
|
||||||
// Set the preview of what could happen if we drop the given
|
// Set the preview of what could happen if we drop the given
|
||||||
// "view" at the "pos"?
|
// "view" at the "pos"?
|
||||||
|
Loading…
x
Reference in New Issue
Block a user