Browse Source

Working on Menubar

Josh Engebretson 10 years ago
parent
commit
b239e3fe10

+ 4 - 4
Data/AtomicEditor/Resources/EditorData/AtomicEditor/editor/ui/mainframe.tb.txt

@@ -16,10 +16,6 @@ TBLayout: distribution: gravity, axis: y
 							@include definitions>menubutton
 							text File
 							id menu file
-						TBButton
-							@include definitions>menubutton
-							text Project
-							id menu project
 						TBButton
 							@include definitions>menubutton
 							text Edit
@@ -28,6 +24,10 @@ TBLayout: distribution: gravity, axis: y
 							@include definitions>menubutton
 							text Resources
 							id menu resources
+						TBButton
+							@include definitions>menubutton
+							text Build
+							id menu build
 						TBButton
 							@include definitions>menubutton
 							text Help

+ 2 - 1
Source/AtomicEditor/Source/AEApplication.cpp

@@ -25,6 +25,7 @@
 #include <Atomic/Environment/Environment.h>
 #include <Atomic/Graphics/Renderer.h>
 
+#include "AEEditorStrings.h"
 #include "Project/ProjectUtils.h"
 #include "Subprocess/AESubprocessSystem.h"
 #include "Build/BuildSystem.h"
@@ -38,7 +39,6 @@
 
 #include "AEEditor.h"
 #include "AEPreferences.h"
-
 #include "AEApplication.h"
 
 #include "Tools/External/AEExternalTooling.h"
@@ -95,6 +95,7 @@ void AEApplication::Start()
 
     input->SetMouseVisible(true);
 
+    context_->RegisterSubsystem(new EditorStrings(context_));
     context_->RegisterSubsystem(new ProjectUtils(context_));
     context_->RegisterSubsystem(new Javascript(context_));
     context_->RegisterSubsystem(new SubprocessSystem(context_));

+ 55 - 0
Source/AtomicEditor/Source/AEEditorStrings.cpp

@@ -0,0 +1,55 @@
+
+// Copyright (c) 2014-2015, THUNDERBEAST GAMES LLC All rights reserved
+// Please see LICENSE.md in repository root for license information
+// https://github.com/AtomicGameEngine/AtomicGameEngine
+
+#include "AtomicEditor.h"
+
+#include <Atomic/Core/Context.h>
+
+#include "AEEvents.h"
+#include "AEEditorStrings.h"
+
+namespace AtomicEditor
+{
+
+EditorStrings::EditorStrings(Context* context) :
+    Object(context)
+{
+    InitializeStrings();
+    SubscribeToEvent(E_EDITORSHUTDOWN, HANDLER(EditorStrings, HandleEditorShutdown));
+}
+
+EditorStrings::~EditorStrings()
+{
+
+}
+
+const String& EditorStrings::Str(EditorString estring)
+{
+    if (stringLookup_.Contains(estring))
+        return stringLookup_[estring];
+    return String::EMPTY;
+}
+
+void EditorStrings::InitializeStrings()
+{
+
+    stringLookup_[RevealInFinder] = "Reveal in Finder";
+
+    // Shortcuts
+    stringLookup_[ShortcutUndo] = "⌘Z";
+    stringLookup_[ShortcutRedo] ="⇧⌘Z";
+    stringLookup_[ShortcutCut] = "⌘X";
+    stringLookup_[ShortcutCopy] = "⌘C";
+    stringLookup_[ShortcutPaste] = "⌘V";
+    stringLookup_[ShortcutFind] = "⌘F";
+    stringLookup_[ShortcutBeautify] = "⌘B";
+}
+
+void EditorStrings::HandleEditorShutdown(StringHash eventType, VariantMap& eventData)
+{
+    context_->RemoveSubsystem(GetType());
+}
+
+}

+ 56 - 0
Source/AtomicEditor/Source/AEEditorStrings.h

@@ -0,0 +1,56 @@
+// Copyright (c) 2014-2015, THUNDERBEAST GAMES LLC All rights reserved
+// Please see LICENSE.md in repository root for license information
+// https://github.com/AtomicGameEngine/AtomicGameEngine
+
+#pragma once
+
+#include <Atomic/Core/Object.h>
+#include <Atomic/IO/FileSystem.h>
+
+using namespace Atomic;
+
+#define EDITOR_STRING(x) (GetSubsystem<EditorStrings>()->Str(EditorStrings::x))
+
+namespace AtomicEditor
+{
+
+class EditorStrings : public Object
+{
+
+    OBJECT(EditorStrings);
+
+public:
+
+    enum EditorString
+    {
+        RevealInFinder,
+        ShortcutUndo,
+        ShortcutRedo,
+        ShortcutCut,
+        ShortcutCopy,
+        ShortcutPaste,
+        ShortcutFind,
+        ShortcutBeautify
+    };
+
+
+    /// Construct.
+    EditorStrings(Context* context);
+    /// Destruct.
+    ~EditorStrings();
+
+    const String& Str(EditorString estring);
+
+private:
+
+    void InitializeStrings();
+
+    void HandleEditorShutdown(StringHash eventType, VariantMap& eventData);
+
+    HashMap<unsigned, String> stringLookup_;
+
+
+};
+
+
+}

+ 30 - 24
Source/AtomicEditor/Source/UI/UIMainFrame.cpp

@@ -29,6 +29,7 @@
 #include "UIFindTextWidget.h"
 #include "../AEEvents.h"
 #include "../AEEditor.h"
+#include "../AEEditorStrings.h"
 #include "../AEPreferences.h"
 #include "../AEJavascript.h"
 #include "../Player/AEPlayer.h"
@@ -51,6 +52,8 @@ MainFrame::MainFrame(Context* context) :
 {
     context->RegisterSubsystem(this);
 
+    // Instead of TBGenericStringItem here, we need custom item so can have shortcuts be right aligned
+
     menuAtomicEditorSource.AddItem(new TBGenericStringItem("About Atomic Editor", TBIDC("about atomic editor")));
     menuAtomicEditorSource.AddItem(new TBGenericStringItem("-"));
     menuAtomicEditorSource.AddItem(new TBGenericStringItem("Manage License", TBIDC("manage license")));
@@ -58,22 +61,28 @@ MainFrame::MainFrame(Context* context) :
     menuAtomicEditorSource.AddItem(new TBGenericStringItem("Check for Updates", TBIDC("check update")));
     menuAtomicEditorSource.AddItem(new TBGenericStringItem("Quit", TBIDC("quit")));
 
+
     menuFileSource.AddItem(new TBGenericStringItem("New Project", TBIDC("new project")));
     menuFileSource.AddItem(new TBGenericStringItem("Open Project", TBIDC("open project")));
     menuFileSource.AddItem(new TBGenericStringItem("Save Project", TBIDC("save project")));
     menuFileSource.AddItem(new TBGenericStringItem("-"));
     menuFileSource.AddItem(new TBGenericStringItem("Close Project", TBIDC("close project")));
+    menuFileSource.AddItem(new TBGenericStringItem("-"));
+    menuFileSource.AddItem(new TBGenericStringItem("-"));
+    menuFileSource.AddItem(new TBGenericStringItem("Close File"));
+
+    menuBuildSource.AddItem(new TBGenericStringItem("Build", TBIDC("project_build")));
+    menuBuildSource.AddItem(new TBGenericStringItem("Build Settings", TBIDC("project_build_settings")));
 
-    menuEditSource.AddItem(new TBGenericStringItem("Undo", TBIDC("edit undo")));
-    menuEditSource.AddItem(new TBGenericStringItem("Redo", TBIDC("edit redo")));
-    menuEditSource.AddItem(new TBGenericStringItem("-"));
-    menuEditSource.AddItem(new TBGenericStringItem("Cut", TBIDC("edit cut")));
-    menuEditSource.AddItem(new TBGenericStringItem("Copy", TBIDC("edit copy")));
-    menuEditSource.AddItem(new TBGenericStringItem("Paste", TBIDC("edit paste")));
-    menuEditSource.AddItem(new TBGenericStringItem("-"));
-    menuEditSource.AddItem(new TBGenericStringItem("Find", TBIDC("edit find")));
-    menuEditSource.AddItem(new TBGenericStringItem("-"));
-    menuEditSource.AddItem(new TBGenericStringItem("Format Code", TBIDC("format code")));
+    menuEditSource.AddItem(new MenubarItem("Undo", TBIDC("edit undo"),  EDITOR_STRING(ShortcutUndo)));
+    menuEditSource.AddItem(new MenubarItem("Redo", TBIDC("edit redo"),  EDITOR_STRING(ShortcutRedo)));
+    menuEditSource.AddItem(new MenubarItem("-"));
+    menuEditSource.AddItem(new MenubarItem("Cut", TBIDC("edit cut"),  EDITOR_STRING(ShortcutCut)));
+    menuEditSource.AddItem(new MenubarItem("Copy", TBIDC("edit copy"),  EDITOR_STRING(ShortcutCopy)));
+    menuEditSource.AddItem(new MenubarItem("Paste", TBIDC("edit paste"),  EDITOR_STRING(ShortcutPaste)));
+    menuEditSource.AddItem(new MenubarItem("-"));
+    menuEditSource.AddItem(new MenubarItem("Find", TBIDC("edit find"),  EDITOR_STRING(ShortcutFind)));
+    menuEditSource.AddItem(new MenubarItem("Format Code", TBIDC("format code"),  EDITOR_STRING(ShortcutBeautify)));
 
     menuResourcesSource.AddItem(new TBGenericStringItem("Create", &menuResourcesCreateSource));
     menuResourcesSource.AddItem(new TBGenericStringItem("-"));
@@ -102,9 +111,6 @@ MainFrame::MainFrame(Context* context) :
     item->SetSkinImage(TBIDC("2DLevelBitmap"));
     menuResourcesCreateSource.AddItem(item);
 
-    menuProjectSource.AddItem(new TBGenericStringItem("Build", TBIDC("project_build")));
-    menuProjectSource.AddItem(new TBGenericStringItem("Build Settings", TBIDC("project_build_settings")));
-
     menuHelpSource.AddItem(new TBGenericStringItem("API Documentation", TBIDC("help_api")));
     menuHelpSource.AddItem(new TBGenericStringItem("-"));
     menuHelpSource.AddItem(new TBGenericStringItem("Forums", TBIDC("help_forums")));
@@ -485,7 +491,7 @@ bool MainFrame::OnEvent(const TBWidgetEvent &ev)
 
         }
 
-        if (ev.target->GetID() == TBIDC("project popup"))
+        if (ev.target->GetID() == TBIDC("build popup"))
         {
             if (!IsProjectLoaded())
                 return true;
@@ -601,13 +607,6 @@ bool MainFrame::OnEvent(const TBWidgetEvent &ev)
 
             return true;
         }
-        else if (ev.target->GetID() == TBIDC("menu file"))
-        {
-            if (TBMenuWindow *menu = new TBMenuWindow(ev.target, TBIDC("file popup")))
-                menu->Show(&menuFileSource, TBPopupAlignment());
-
-            return true;
-        }
         else if (ev.target->GetID() == TBIDC("menu edit"))
         {
             if (TBMenuWindow *menu = new TBMenuWindow(ev.target, TBIDC("edit popup")))
@@ -615,10 +614,10 @@ bool MainFrame::OnEvent(const TBWidgetEvent &ev)
 
             return true;
         }
-        else if (ev.target->GetID() == TBIDC("menu project"))
+        else if (ev.target->GetID() == TBIDC("menu file"))
         {
-            if (TBMenuWindow *menu = new TBMenuWindow(ev.target, TBIDC("project popup")))
-                menu->Show(&menuProjectSource, TBPopupAlignment());
+            if (TBMenuWindow *menu = new TBMenuWindow(ev.target, TBIDC("file popup")))
+                menu->Show(&menuFileSource, TBPopupAlignment());
 
             return true;
         }
@@ -629,6 +628,13 @@ bool MainFrame::OnEvent(const TBWidgetEvent &ev)
 
             return true;
         }
+        else if (ev.target->GetID() == TBIDC("menu build"))
+        {
+            if (TBMenuWindow *menu = new TBMenuWindow(ev.target, TBIDC("build popup")))
+                menu->Show(&menuBuildSource, TBPopupAlignment());
+
+            return true;
+        }
         else if (ev.target->GetID() == TBIDC("menu issues"))
         {
             resourceframe_->ShowIssuesWidget(!resourceframe_->IssuesWidgetVisible());

+ 4 - 2
Source/AtomicEditor/Source/UI/UIMainFrame.h

@@ -5,6 +5,7 @@
 #pragma once
 
 #include "AEWidget.h"
+#include "UIMenubar.h"
 
 #include <TurboBadger/tb_menu_window.h>
 
@@ -37,8 +38,9 @@ class MainFrame : public AEWidget
 
     TBGenericStringItemSource menuAtomicEditorSource;
     TBGenericStringItemSource menuFileSource;
-    TBGenericStringItemSource menuEditSource;
-    TBGenericStringItemSource menuProjectSource;
+    MenubarItemSource menuEditSource;
+    TBGenericStringItemSource menuBuildSource;
+
     TBGenericStringItemSource menuResourcesSource;
     TBGenericStringItemSource menuResourcesCreateSource;
     TBGenericStringItemSource menuHelpSource;

+ 93 - 0
Source/AtomicEditor/Source/UI/UIMenubar.cpp

@@ -0,0 +1,93 @@
+// Copyright (c) 2014-2015, THUNDERBEAST GAMES LLC All rights reserved
+// Please see LICENSE.md in repository root for license information
+// https://github.com/AtomicGameEngine/AtomicGameEngine
+
+#include "AtomicEditor.h"
+
+#include <Atomic/UI/TBUI.h>
+#include <Atomic/IO/Log.h>
+#include "UIMenubar.h"
+
+using namespace tb;
+
+namespace AtomicEditor
+{
+
+// == AdvancedItemWidget ======================================================
+
+MenubarItemWidget::MenubarItemWidget(MenubarItem *item, MenubarItemSource *source,
+                                     TBSelectItemViewer *source_viewer, int index)
+    : m_source(source)
+    , m_source_viewer(source_viewer)
+    , m_index(index)
+{
+    SetSkinBg(TBIDC("TBSelectItem"));
+    SetLayoutDistribution(LAYOUT_DISTRIBUTION_GRAVITY);
+    SetLayoutDistributionPosition(LAYOUT_DISTRIBUTION_POSITION_LEFT_TOP);
+    SetPaintOverflowFadeout(false);
+
+    TBWidget* root = GetContentRoot();
+
+    TBTextField* text = new TBTextField();
+    text->SetText(item->str);
+    root->AddChild(text);
+
+    if (item->shortcut_.Length())
+    {
+        TBWidget* spacer = new TBWidget();
+        spacer->SetGravity(WIDGET_GRAVITY_LEFT_RIGHT);
+        root->AddChild(spacer);
+
+        TBTextField* shortcut = new TBTextField();
+        shortcut->SetText(item->shortcut_.CString());
+        shortcut->SetGravity(WIDGET_GRAVITY_RIGHT);
+        root->AddChild(shortcut);
+
+    }
+
+}
+
+bool MenubarItemWidget::OnEvent(const TBWidgetEvent &ev)
+{
+    if (ev.type == EVENT_TYPE_CLICK && ev.target->GetID() == TBIDC("check"))
+    {
+        // MenubarItem *item = m_source->GetItem(m_index);
+        m_source->InvokeItemChanged(m_index, m_source_viewer);
+        return true;
+    }
+    else if (ev.type == EVENT_TYPE_CLICK && ev.target->GetID() == TBIDC("delete"))
+    {
+        m_source->DeleteItem(m_index);
+        return true;
+    }
+    return TBLayout::OnEvent(ev);
+}
+
+// == AdvancedItemSource ======================================================
+
+bool MenubarItemSource::Filter(int index, const char *filter)
+{
+    return true;
+}
+
+TBWidget *MenubarItemSource::CreateItemWidget(int index, TBSelectItemViewer *viewer)
+{
+    const char *string = GetItemString(index);
+    if (string && *string == '-')
+    {
+        if (TBSeparator *separator = new TBSeparator)
+        {
+            separator->SetGravity(WIDGET_GRAVITY_ALL);
+            separator->SetSkinBg(TBIDC("TBSelectItem.separator"));
+            return separator;
+        }
+    }
+
+    if (TBLayout *layout = new MenubarItemWidget(GetItem(index), this, viewer, index))
+        return layout;
+    return NULL;
+}
+
+
+
+}

+ 52 - 0
Source/AtomicEditor/Source/UI/UIMenubar.h

@@ -0,0 +1,52 @@
+// Copyright (c) 2014-2015, THUNDERBEAST GAMES LLC All rights reserved
+// Please see LICENSE.md in repository root for license information
+// https://github.com/AtomicGameEngine/AtomicGameEngine
+
+#pragma once
+
+#include "AEWidget.h"
+
+#include <TurboBadger/tb_menu_window.h>
+#include <TurboBadger/tb_select.h>
+
+using namespace Atomic;
+
+namespace AtomicEditor
+{
+
+class ListViewItemSource;
+class ListViewItemWidget;
+
+class MenubarItem : public TBGenericStringItem
+{
+public:
+    MenubarItem(const char *str, const TBID &id = TBID((int32)0), const String& shortcut = String::EMPTY)
+        : TBGenericStringItem(str, id), shortcut_(shortcut)
+    {
+
+    }
+
+    String shortcut_;
+
+};
+
+class MenubarItemSource : public TBSelectItemSourceList<MenubarItem>
+{
+public:
+    virtual bool Filter(int index, const char *filter);
+    virtual TBWidget *CreateItemWidget(int index, TBSelectItemViewer *viewer);
+};
+
+class MenubarItemWidget : public TBLayout
+{
+public:
+    MenubarItemWidget(MenubarItem *item, MenubarItemSource *source, TBSelectItemViewer *source_viewer, int index);
+    virtual bool OnEvent(const TBWidgetEvent &ev);
+private:
+    MenubarItemSource *m_source;
+    TBSelectItemViewer *m_source_viewer;
+    int m_index;
+};
+
+
+}