Josh Engebretson 10 years ago
parent
commit
ccdad9bd3b

+ 1 - 0
Data/AtomicEditor/Resources/EditorData/AtomicEditor/editor/ui/activation.tb.txt

@@ -5,6 +5,7 @@ TBLayout: axis: y, distribution: gravity, position: left
 			font: size:18
 		TBLayout: gravity: left right, distribution-position: right bottom
 			TBEditField: id: license_key, autofocus: 1
+				placeholder ATOMIC-XXXX-XXXX-XXXX-XXXX
 				lp: min-width: 380
 	TBSeparator: gravity: left right, skin: AESeparator
 	TBLayout:

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

@@ -21,10 +21,6 @@ TBLayout: distribution: gravity, axis: y
 							@include definitions>menubutton
 							text Edit
 							id menu edit
-						TBButton
-							@include definitions>menubutton
-							text Resources
-							id menu resources
 						TBButton
 							@include definitions>menubutton
 							text Build

+ 14 - 5
Data/AtomicEditor/Resources/EditorData/AtomicEditor/editor/ui/projectframe.tb.txt

@@ -1,10 +1,19 @@
+definitions
+	menubutton		
+		lp: height: 20
+		font: name: Vera, size: 11
 TBLayout: distribution: gravity, axis: y, id: projectframe
 	lp: min-width: 300
-	TBEditField
-		id filter
-		gravity all
-		placeholder @search
-		type search	
+	TBLayout: distribution: gravity
+		TBButton
+			@include definitions>menubutton
+			text Create
+			id menu create
+		TBEditField
+			id filter
+			gravity left right
+			placeholder @search
+			type search	
 	TBWidget: gravity: all
 		TBLayout: distribution: gravity, id: foldercontainer, gravity: all
 	TBScrollContainer: scroll-mode: y-auto, id: contentcontainerscroll, gravity: all

+ 0 - 0
Source/AtomicEditor/Source/AEEditorCommands.cpp


+ 0 - 0
Source/AtomicEditor/Source/AEEditorCommands.h


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

@@ -44,6 +44,8 @@ void EditorStrings::InitializeStrings()
     stringLookup_[ShortcutCopy] = "⌘C";
     stringLookup_[ShortcutPaste] = "⌘V";
     stringLookup_[ShortcutFind] = "⌘F";
+    stringLookup_[ShortcutFindNext] = "⌘G";
+    stringLookup_[ShortcutFindPrev] = "⇧⌘G";
     stringLookup_[ShortcutBeautify] = "⌘I";
 
     stringLookup_[ShortcutSaveFile] = "⌘S";

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

@@ -30,6 +30,8 @@ public:
         ShortcutCopy,
         ShortcutPaste,
         ShortcutFind,
+        ShortcutFindNext,
+        ShortcutFindPrev,
         ShortcutBeautify,
         ShortcutCloseFile,
         ShortcutSaveFile,

+ 3 - 1
Source/AtomicEditor/Source/Tools/External/AEExternalTool.cpp

@@ -27,7 +27,9 @@ bool ExternalTool::LaunchInternal(const String& applicationPath, const String& a
 {
     SubprocessSystem* system = GetSubsystem<SubprocessSystem>();
 
-    Vector<String> vargs = args.Split(' ');
+    Vector<String> vargs;
+    if (args.Length())
+        vargs = args.Split(' ');
 
     subprocess_ = system->Launch(applicationPath, vargs);
 

+ 175 - 198
Source/AtomicEditor/Source/UI/UIMainFrame.cpp

@@ -4,6 +4,9 @@
 
 #include "AtomicEditor.h"
 
+#include <TurboBadger/tb_message_window.h>
+#include <TurboBadger/tb_editfield.h>
+
 #include <Atomic/Core/ProcessUtils.h>
 #include <Atomic/UI/TBUI.h>
 #include <Atomic/IO/Log.h>
@@ -27,17 +30,17 @@
 #include "License/AEVersionCheck.h"
 
 #include "UIFindTextWidget.h"
-#include "../AEEvents.h"
-#include "../AEEditor.h"
-#include "../AEEditorStrings.h"
-#include "../AEPreferences.h"
-#include "../AEJavascript.h"
-#include "../Player/AEPlayer.h"
-#include "../Project/AEProject.h"
-#include "../Project/ProjectUtils.h"
+#include "AEEvents.h"
+#include "AEEditor.h"
+#include "AEEditorStrings.h"
+#include "AEPreferences.h"
+#include "AEJavascript.h"
+#include "Player/AEPlayer.h"
+#include "Project/AEProject.h"
+#include "Project/ProjectUtils.h"
+
+#include "Tools/External/AEExternalTooling.h"
 
-#include <TurboBadger/tb_message_window.h>
-#include <TurboBadger/tb_editfield.h>
 
 using namespace tb;
 
@@ -52,78 +55,7 @@ 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 MenubarItem("About Atomic Editor", TBIDC("about atomic editor")));
-    menuAtomicEditorSource.AddItem(new MenubarItem("-"));
-    menuAtomicEditorSource.AddItem(new MenubarItem("Manage License", TBIDC("manage license")));
-    menuAtomicEditorSource.AddItem(new MenubarItem("-"));
-    menuAtomicEditorSource.AddItem(new MenubarItem("Check for Updates", TBIDC("check update")));
-    menuAtomicEditorSource.AddItem(new MenubarItem("-"));
-    menuAtomicEditorSource.AddItem(new MenubarItem("Quit", TBIDC("quit")));
-
-    menuFileSource.AddItem(new MenubarItem("New Project", TBIDC("new project")));
-    menuFileSource.AddItem(new MenubarItem("Open Project", TBIDC("open project")));
-    menuFileSource.AddItem(new MenubarItem("Save Project", TBIDC("save project")));
-    menuFileSource.AddItem(new MenubarItem("-"));
-    menuFileSource.AddItem(new MenubarItem("Close Project", TBIDC("close project")));
-    menuFileSource.AddItem(new MenubarItem("-"));
-    menuFileSource.AddItem(new MenubarItem("Save File", TBIDC("save file"), EDITOR_STRING(ShortcutSaveFile)));
-    menuFileSource.AddItem(new MenubarItem("Close File", TBIDC("close file"), EDITOR_STRING(ShortcutCloseFile)));
-
-    menuBuildSource.AddItem(new MenubarItem("Build", TBIDC("project_build"), EDITOR_STRING(ShortcutBuild)));
-    menuBuildSource.AddItem(new MenubarItem("-"));
-    menuBuildSource.AddItem(new MenubarItem("Build Settings", TBIDC("project_build_settings"), EDITOR_STRING(ShortcutBuildSettings)));
-
-    menuToolsSource.AddItem(new MenubarItem("Tiled Map Editor", TBIDC("tools tiled")));
-
-    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)));
-    menuEditSource.AddItem(new MenubarItem("-"));
-    menuEditSource.AddItem(new MenubarItem("Play", TBIDC("play"),  EDITOR_STRING(ShortcutPlay)));
-
-    menuResourcesSource.AddItem(new MenubarItem("Create", &menuResourcesCreateSource));
-    menuResourcesSource.AddItem(new MenubarItem("-"));
-    menuResourcesSource.AddItem(new MenubarItem("Reveal in Finder", TBIDC("reveal")));
-
-    MenubarItem* item;
-    item = new MenubarItem("Folder", TBIDC("create_folder"));
-    item->SetSkinImage(TBIDC("Folder.icon"));
-    menuResourcesCreateSource.AddItem(item);
-
-    menuResourcesCreateSource.AddItem(new MenubarItem("-"));
-
-    item = new MenubarItem("Component", TBIDC("create_component"));
-    item->SetSkinImage(TBIDC("JavascriptBitmap"));
-    menuResourcesCreateSource.AddItem(item);
-    item = new MenubarItem("Script", TBIDC("create_script"));
-    item->SetSkinImage(TBIDC("JavascriptBitmap"));
-    menuResourcesCreateSource.AddItem(item);
-    item = new MenubarItem("Module", TBIDC("create_module"));
-    item->SetSkinImage(TBIDC("JavascriptBitmap"));
-    menuResourcesCreateSource.AddItem(item);
-
-    menuResourcesCreateSource.AddItem(new MenubarItem("-"));
-
-    item = new MenubarItem("2D Level", TBIDC("create_2d_level"));
-    item->SetSkinImage(TBIDC("2DLevelBitmap"));
-    menuResourcesCreateSource.AddItem(item);
-
-    menuHelpSource.AddItem(new MenubarItem("API Documentation", TBIDC("help_api")));
-    menuHelpSource.AddItem(new MenubarItem("-"));
-    menuHelpSource.AddItem(new MenubarItem("Forums", TBIDC("help_forums")));
-    menuHelpSource.AddItem(new MenubarItem("-"));
-    menuHelpSource.AddItem(new MenubarItem("Atomic Game Engine on GitHub", TBIDC("help_github")));
-
-    menuDeveloperSource.AddItem(new MenubarItem("Set 1920x1080 Resolution", TBIDC("developer_resolution")));
-
+    InitializeMenuSources();
 
     TBUI* tbui = GetSubsystem<TBUI>();
     tbui->LoadResourceFile(delegate_, "AtomicEditor/editor/ui/mainframe.tb.txt");
@@ -171,7 +103,6 @@ MainFrame::MainFrame(Context* context) :
     // better way to do this? projectviewcontainer isn't a layout
     wd = resourceframe_->GetWidgetDelegate();
     wd->SetSize(rect.w, rect.h);
-    //resourceviewcontainer->AddChild(wd);
 
     platformIndicator_ = delegate_->GetWidgetByIDAndType<TBSkinImage>(TBIDC("current_platform_indicator"));
     assert(platformIndicator_);
@@ -206,6 +137,57 @@ MainFrame::~MainFrame()
 {
 }
 
+void MainFrame::InitializeMenuSources()
+{
+    // Instead of TBGenericStringItem here, we need custom item so can have shortcuts be right aligned
+
+    menuAtomicEditorSource.AddItem(new MenubarItem("About Atomic Editor", TBIDC("about atomic editor")));
+    menuAtomicEditorSource.AddItem(new MenubarItem("-"));
+    menuAtomicEditorSource.AddItem(new MenubarItem("Manage License", TBIDC("manage license")));
+    menuAtomicEditorSource.AddItem(new MenubarItem("-"));
+    menuAtomicEditorSource.AddItem(new MenubarItem("Check for Updates", TBIDC("check update")));
+    menuAtomicEditorSource.AddItem(new MenubarItem("-"));
+    menuAtomicEditorSource.AddItem(new MenubarItem("Quit", TBIDC("quit")));
+
+    menuFileSource.AddItem(new MenubarItem("New Project", TBIDC("new project")));
+    menuFileSource.AddItem(new MenubarItem("Open Project", TBIDC("open project")));
+    menuFileSource.AddItem(new MenubarItem("Save Project", TBIDC("save project")));
+    menuFileSource.AddItem(new MenubarItem("-"));
+    menuFileSource.AddItem(new MenubarItem("Close Project", TBIDC("close project")));
+    menuFileSource.AddItem(new MenubarItem("-"));
+    menuFileSource.AddItem(new MenubarItem("Save File", TBIDC("save file"), EDITOR_STRING(ShortcutSaveFile)));
+    menuFileSource.AddItem(new MenubarItem("Close File", TBIDC("close file"), EDITOR_STRING(ShortcutCloseFile)));
+
+    menuBuildSource.AddItem(new MenubarItem("Build", TBIDC("project_build"), EDITOR_STRING(ShortcutBuild)));
+    menuBuildSource.AddItem(new MenubarItem("-"));
+    menuBuildSource.AddItem(new MenubarItem("Build Settings", TBIDC("project_build_settings"), EDITOR_STRING(ShortcutBuildSettings)));
+
+    menuToolsSource.AddItem(new MenubarItem("Tiled Map Editor", TBIDC("tools tiled")));
+
+    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("Find Next", TBIDC("edit find next"),  EDITOR_STRING(ShortcutFindNext)));
+    menuEditSource.AddItem(new MenubarItem("Find Prev", TBIDC("edit find prev"),  EDITOR_STRING(ShortcutFindPrev)));
+    menuEditSource.AddItem(new MenubarItem("-"));
+    menuEditSource.AddItem(new MenubarItem("Format Code", TBIDC("format code"),  EDITOR_STRING(ShortcutBeautify)));
+    menuEditSource.AddItem(new MenubarItem("-"));
+    menuEditSource.AddItem(new MenubarItem("Play", TBIDC("play"),  EDITOR_STRING(ShortcutPlay)));
+
+    menuHelpSource.AddItem(new MenubarItem("API Documentation", TBIDC("help_api")));
+    menuHelpSource.AddItem(new MenubarItem("-"));
+    menuHelpSource.AddItem(new MenubarItem("Forums", TBIDC("help_forums")));
+    menuHelpSource.AddItem(new MenubarItem("-"));
+    menuHelpSource.AddItem(new MenubarItem("Atomic Game Engine on GitHub", TBIDC("help_github")));
+
+    menuDeveloperSource.AddItem(new MenubarItem("Set 1920x1080 Resolution", TBIDC("developer_resolution")));
+}
+
 ProjectFrame* MainFrame::GetProjectFrame()
 {
     return projectframe_;
@@ -246,15 +228,6 @@ void MainFrame::HandleJavascriptSaved(StringHash eventType, VariantMap& eventDat
     UpdateJavascriptErrors();
 }
 
-void MainFrame::HandleKeyDown(StringHash eventType, VariantMap& eventData)
-{
-    using namespace KeyDown;
-
-    int keycode = eventData[P_KEY].GetInt();
-    int scancode = eventData[P_SCANCODE].GetInt();
-
-}
-
 bool MainFrame::UpdateJavascriptErrors()
 {
     // parse errors
@@ -290,9 +263,9 @@ bool MainFrame::UpdateJavascriptErrors()
 
 }
 
-void MainFrame::HandleKeyUp(StringHash eventType, VariantMap& eventData)
+void MainFrame::HandleKeyDown(StringHash eventType, VariantMap& eventData)
 {
-    using namespace KeyUp;
+    using namespace KeyDown;
 
     Input* input = context_->GetSubsystem<Input>();
     Editor* editor = context_->GetSubsystem<Editor>();
@@ -321,6 +294,13 @@ void MainFrame::HandleKeyUp(StringHash eventType, VariantMap& eventData)
 
 }
 
+void MainFrame::HandleKeyUp(StringHash eventType, VariantMap& eventData)
+{
+    using namespace KeyUp;
+
+
+}
+
 bool MainFrame::ResourceFrameVisible()
 {
     TBWidget *child;
@@ -421,13 +401,89 @@ bool MainFrame::IsProjectLoaded()
 
 }
 
-
-bool MainFrame::OnEvent(const TBWidgetEvent &ev)
+bool MainFrame::HandleMenubarEvent(const TBWidgetEvent &ev)
 {
-    Editor* editor = GetSubsystem<Editor>();
+    if (ev.type == EVENT_TYPE_CLICK)
+    {
+        if (ev.target->GetID() == TBIDC("menu atomic editor"))
+        {
+            if (TBMenuWindow *menu = new TBMenuWindow(ev.target, TBIDC("atomic editor popup")))
+            {
+                menu->Show(&menuAtomicEditorSource, TBPopupAlignment());
+            }
+
+            return true;
+        }
+        else if (ev.target->GetID() == TBIDC("menu edit"))
+        {
+            if (TBMenuWindow *menu = new TBMenuWindow(ev.target, TBIDC("edit popup")))
+                menu->Show(&menuEditSource, TBPopupAlignment());
+
+            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 build"))
+        {
+            if (TBMenuWindow *menu = new TBMenuWindow(ev.target, TBIDC("build popup")))
+                menu->Show(&menuBuildSource, TBPopupAlignment());
+
+            return true;
+        }
+        else if (ev.target->GetID() == TBIDC("menu tools"))
+        {
+            if (TBMenuWindow *menu = new TBMenuWindow(ev.target, TBIDC("tools popup")))
+                menu->Show(&menuToolsSource, TBPopupAlignment());
+
+            return true;
+        }
+        else if (ev.target->GetID() == TBIDC("menu issues"))
+        {
+            resourceframe_->ShowIssuesWidget(!resourceframe_->IssuesWidgetVisible());
+            return true;
+        }
+        else if (ev.target->GetID() == TBIDC("menu console"))
+        {
+            resourceframe_->ShowConsoleWidget(!resourceframe_->ConsoleWidgetVisible());
+            return true;
+        }
+        else if (ev.target->GetID() == TBIDC("menu errors"))
+        {
+            resourceframe_->ShowErrorsWidget(!resourceframe_->ErrorsWidgetVisible());
+            return true;
+        }
+        else if (ev.target->GetID() == TBIDC("menu help"))
+        {
+            if (TBMenuWindow *menu = new TBMenuWindow(ev.target, TBIDC("help popup")))
+                menu->Show(&menuHelpSource, TBPopupAlignment());
+
+            return true;
+        }
+        else if (ev.target->GetID() == TBIDC("menu developer"))
+        {
+            if (TBMenuWindow *menu = new TBMenuWindow(ev.target, TBIDC("developer popup")))
+                menu->Show(&menuDeveloperSource, TBPopupAlignment());
+
+            return true;
+        }
+
+    }
+
+    return false;
+
+}
+
+bool MainFrame::HandlePopupMenuEvent(const TBWidgetEvent &ev)
+{
     if (ev.type == EVENT_TYPE_CLICK)
     {
+        Editor* editor = GetSubsystem<Editor>();
+
         if (ev.target->GetID() == TBIDC("file popup"))
         {
             if (ev.ref_id == TBIDC("new project"))
@@ -491,9 +547,10 @@ bool MainFrame::OnEvent(const TBWidgetEvent &ev)
                 TBWidgetEvent* eptr = (TBWidgetEvent*) &ev;
                 eptr->target = NULL;
                 editor->RequestExit();
-                return true;
             }
 
+            return true;
+
         }
 
         if (ev.target->GetID() == TBIDC("build popup"))
@@ -520,40 +577,16 @@ bool MainFrame::OnEvent(const TBWidgetEvent &ev)
             {
 
             }
+
+            return true;
         }
 
-        if (ev.target->GetID() == TBIDC("resources popup"))
+        if (ev.target->GetID() == TBIDC("tools popup"))
         {
-            UIModalOps* ops = GetSubsystem<UIModalOps>();
-
-            String resourcePath = projectframe_->GetCurrentContentFolder();
-
-            if (resourcePath.Length())
+            if (ev.ref_id == TBIDC("tools tiled"))
             {
-                if (ev.ref_id == TBIDC("create_component"))
-                {
-                    ops->ShowCreateComponent(resourcePath);
-                }
-                else if (ev.ref_id == TBIDC("create_script"))
-                {
-                    ops->ShowCreateScript(resourcePath);
-                }
-                else if (ev.ref_id == TBIDC("create_module"))
-                {
-                    ops->ShowCreateModule(resourcePath);
-                }
-                else if (ev.ref_id == TBIDC("create_2d_level"))
-                {
-                    ops->ShowCreate2DLevel(resourcePath);
-                }
-                else if (ev.ref_id == TBIDC("create_folder"))
-                {
-                    ops->ShowNewFolder(resourcePath);
-                }
-                else if (ev.ref_id == TBIDC("reveal"))
-                {
-                    RevealInFinder();
-                }
+                ExternalTooling* tooling = GetSubsystem<ExternalTooling>();
+                tooling->LaunchOrOpen("AtomicTiled", "");
             }
 
             return true;
@@ -600,89 +633,33 @@ bool MainFrame::OnEvent(const TBWidgetEvent &ev)
                 graphics->SetWindowSize(1920, 1080);
                 graphics->CenterWindow();
             }
-        }
-
-
-        if (ev.target->GetID() == TBIDC("menu atomic editor"))
-        {
-            if (TBMenuWindow *menu = new TBMenuWindow(ev.target, TBIDC("atomic editor popup")))
-            {
-                menu->Show(&menuAtomicEditorSource, TBPopupAlignment());
-            }
 
             return true;
         }
-        else if (ev.target->GetID() == TBIDC("menu edit"))
-        {
-            if (TBMenuWindow *menu = new TBMenuWindow(ev.target, TBIDC("edit popup")))
-                menu->Show(&menuEditSource, TBPopupAlignment());
 
-            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 resources"))
-        {
-            if (TBMenuWindow *menu = new TBMenuWindow(ev.target, TBIDC("resources popup")))
-                menu->Show(&menuResourcesSource, TBPopupAlignment());
+    return false;
+}
 
-            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 tools"))
-        {
-            if (TBMenuWindow *menu = new TBMenuWindow(ev.target, TBIDC("tools popup")))
-                menu->Show(&menuToolsSource, TBPopupAlignment());
+bool MainFrame::OnEvent(const TBWidgetEvent &ev)
+{
+    if (HandleMenubarEvent(ev))
+        return true;
 
-            return true;
-        }
-        else if (ev.target->GetID() == TBIDC("menu issues"))
-        {
-            resourceframe_->ShowIssuesWidget(!resourceframe_->IssuesWidgetVisible());
-            return true;
-        }
-        else if (ev.target->GetID() == TBIDC("menu console"))
-        {
-            resourceframe_->ShowConsoleWidget(!resourceframe_->ConsoleWidgetVisible());
-            return true;
-        }
-        else if (ev.target->GetID() == TBIDC("menu errors"))
-        {
-            resourceframe_->ShowErrorsWidget(!resourceframe_->ErrorsWidgetVisible());
-            return true;
-        }
-        else if (ev.target->GetID() == TBIDC("unsaved_modifications_dialog"))
-        {
-            resourceframe_->FocusCurrentTab();
-            return true;
-        }
-        else if (ev.target->GetID() == TBIDC("menu help"))
-        {
-            if (TBMenuWindow *menu = new TBMenuWindow(ev.target, TBIDC("help popup")))
-                menu->Show(&menuHelpSource, TBPopupAlignment());
+    if (HandlePopupMenuEvent(ev))
+        return true;
 
-            return true;
-        }
-        else if (ev.target->GetID() == TBIDC("menu developer"))
-        {
-            if (TBMenuWindow *menu = new TBMenuWindow(ev.target, TBIDC("developer popup")))
-                menu->Show(&menuDeveloperSource, TBPopupAlignment());
+    if (ev.type == EVENT_TYPE_CLICK)
+    {
 
+        if (ev.target->GetID() == TBIDC("unsaved_modifications_dialog"))
+        {
+            resourceframe_->FocusCurrentTab();
             return true;
         }
 
-
     }
 
     return false;

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

@@ -41,8 +41,6 @@ class MainFrame : public AEWidget
     MenubarItemSource menuEditSource;
     MenubarItemSource menuBuildSource;
 
-    MenubarItemSource menuResourcesSource;
-    MenubarItemSource menuResourcesCreateSource;
     MenubarItemSource menuHelpSource;
     MenubarItemSource menuDeveloperSource;
 
@@ -81,6 +79,10 @@ public:
 
 private:
 
+    bool HandleMenubarEvent(const TBWidgetEvent &ev);
+    bool HandlePopupMenuEvent(const TBWidgetEvent &ev);
+    void InitializeMenuSources();
+
     void UpdateFindTextWidget();
 
     void HandleKeyDown(StringHash eventType, VariantMap& eventData);

+ 3 - 1
Source/AtomicEditor/Source/UI/UIMenubar.cpp

@@ -82,7 +82,6 @@ bool MenubarItemWidget::OnEvent(const TBWidgetEvent &ev)
 {
     if (m_source && ev.type == EVENT_TYPE_CLICK && ev.target == this)
     {
-        //OpenSubMenu();
         return false;
     }
 
@@ -106,7 +105,10 @@ TBWidget *MenubarItemSource::CreateItemWidget(int index, TBSelectItemViewer *vie
     if (sub_source || image)
     {
         if (TBSimpleLayoutItemWidget *itemwidget = new TBSimpleLayoutItemWidget(image, sub_source, string))
+        {
+            itemwidget->SetID(GetItem(index)->id);
             return itemwidget;
+        }
     }
     else if (string && *string == '-')
     {

+ 127 - 2
Source/AtomicEditor/Source/UI/UIProjectFrame.cpp

@@ -6,11 +6,13 @@
 
 #include <TurboBadger/tb_select.h>
 
-#include <Atomic/UI/TBUI.h>
+#include <Atomic/Core/Context.h>
 #include <Atomic/IO/Log.h>
 #include <Atomic/IO/FileSystem.h>
 #include <Atomic/Resource/ResourceEvents.h>
 
+#include <Atomic/UI/TBUI.h>
+
 #include "../AEEditor.h"
 #include "../Project/AEProject.h"
 #include "UIListView.h"
@@ -52,6 +54,8 @@ ProjectFrame::ProjectFrame(Context* context) :
 
     SubscribeToEvent(E_FILECHANGED, HANDLER(ProjectFrame, HandleFileChanged));
 
+    InitializeMenuSources();
+
 }
 
 ProjectFrame::~ProjectFrame()
@@ -59,6 +63,32 @@ ProjectFrame::~ProjectFrame()
 
 }
 
+void ProjectFrame::InitializeMenuSources()
+{
+
+    MenubarItem* item;
+    item = new MenubarItem("Folder", TBIDC("create_folder"));
+    item->SetSkinImage(TBIDC("Folder.icon"));
+    menuCreateSource.AddItem(item);
+
+    menuCreateSource.AddItem(new MenubarItem("-"));
+
+    item = new MenubarItem("Component", TBIDC("create_component"));
+    item->SetSkinImage(TBIDC("JavascriptBitmap"));
+    menuCreateSource.AddItem(item);
+    item = new MenubarItem("Script", TBIDC("create_script"));
+    item->SetSkinImage(TBIDC("JavascriptBitmap"));
+    menuCreateSource.AddItem(item);
+    item = new MenubarItem("Module", TBIDC("create_module"));
+    item->SetSkinImage(TBIDC("JavascriptBitmap"));
+    menuCreateSource.AddItem(item);
+
+    item = new MenubarItem("2D Level", TBIDC("create_2d_level"));
+    item->SetSkinImage(TBIDC("2DLevelBitmap"));
+    menuCreateSource.AddItem(item);
+
+}
+
 void ProjectFrame::Refresh()
 {
     String cfolder = currentContentFolder_;
@@ -158,6 +188,8 @@ void ProjectFrame::RefreshFolders()
     resources->SetExpanded(true);
     RefreshContent(resourcePath);
 
+    folderList_->GetRootList()->SetValue(0);
+
 }
 
 void ProjectFrame::ScanContentDirForContent(Vector<String>& folders, Vector<String>& content, const String& fullPath)
@@ -280,15 +312,70 @@ void ProjectFrame::RefreshContent(const String& fullpath)
 
 }
 
+bool ProjectFrame::HandlePopMenuEvent(const TBWidgetEvent &ev)
+{
+    if (ev.type == EVENT_TYPE_CLICK)
+    {
+        if (ev.target->GetID() == TBIDC("create popup"))
+        {
+            UIModalOps* ops = GetSubsystem<UIModalOps>();
+
+            String resourcePath = GetCurrentContentFolder();
+
+            if (resourcePath.Length())
+            {
+                if (ev.ref_id == TBIDC("create_component"))
+                {
+                    if (CheckResourceCreatePath(resourcePath, "Component"))
+                        ops->ShowCreateComponent(resourcePath);
+                }
+                else if (ev.ref_id == TBIDC("create_script"))
+                {
+                    if (CheckResourceCreatePath(resourcePath, "Script"))
+                        ops->ShowCreateScript(resourcePath);
+                }
+                else if (ev.ref_id == TBIDC("create_module"))
+                {
+                    if (CheckResourceCreatePath(resourcePath, "Module"))
+                        ops->ShowCreateModule(resourcePath);
+                }
+                else if (ev.ref_id == TBIDC("create_2d_level"))
+                {
+                    ops->ShowCreate2DLevel(resourcePath);
+                }
+                else if (ev.ref_id == TBIDC("create_folder"))
+                {
+                    ops->ShowNewFolder(resourcePath);
+                }
+            }
+
+            return true;
+        }
+    }
+
+    return false;
+
+}
+
 bool ProjectFrame::OnEvent(const TBWidgetEvent &ev)
 {
     if (!ev.target)
         return false;
 
-    TBID id = ev.target->GetID();
+    if (HandlePopMenuEvent(ev))
+        return true;
 
     if (ev.type == EVENT_TYPE_CLICK)
     {
+
+        if (ev.target->GetID() == TBIDC("menu create"))
+        {
+            if (TBMenuWindow *menu = new TBMenuWindow(ev.target, TBIDC("create popup")))
+                menu->Show(&menuCreateSource, TBPopupAlignment());
+
+            return true;
+        }
+
         // context menu
         if (ev.target->GetID() == TBIDC("contextmenu"))
         {
@@ -381,6 +468,44 @@ void ProjectFrame::SelectCurrentContentFolder(const String& folder)
         RefreshContent(folder);
 }
 
+bool ProjectFrame::CheckResourceCreatePath(const String& path, const String& resourceType)
+{
+    Editor* editor = GetSubsystem<Editor>();
+    Project* project = editor->GetProject();
+
+    if (resourceType == "Script")
+    {
+        if (!project->IsScriptsDirOrFile(path))
+        {
+            editor->PostModalError("Create Script Error", "Scripts must reside in or in a subfolder of the Scripts folder");
+            return false;
+        }
+
+
+    }
+    if (resourceType == "Module")
+    {
+        if (!project->IsModulesDirOrFile(path))
+        {
+            editor->PostModalError("Create Module Error", "Modules must reside in or in a subfolder of the Modules folder");
+            return false;
+        }
+
+
+    }
+    if (resourceType == "Component")
+    {
+        if (!project->IsComponentsDirOrFile(path))
+        {
+            editor->PostModalError("Create Component Error", "Components must reside in or in a subfolder of the Components folder");
+            return false;
+        }
+
+    }
+
+    return true;
+
+}
 
 // Context Menus
 

+ 7 - 0
Source/AtomicEditor/Source/UI/UIProjectFrame.h

@@ -5,6 +5,7 @@
 #pragma once
 
 #include "AEWidget.h"
+#include "UIMenubar.h"
 
 using namespace Atomic;
 
@@ -51,6 +52,10 @@ public:
 
 private:
 
+    void InitializeMenuSources();
+    bool HandlePopMenuEvent(const TBWidgetEvent &ev);
+    bool CheckResourceCreatePath(const String& path, const String& resourceType);
+
     bool OnContextMenuEvent(const TBWidgetEvent &ev);
     void CreateFolderContextMenu(const String& folder, int x, int y);
     void CreateContentContextMenu(const String& content, int x, int y);
@@ -66,6 +71,8 @@ private:
     HashMap<uint32, String> tbidToContent_;
     HashMap<uint32, String> tbidToContentFolder_;
 
+    MenubarItemSource menuCreateSource;
+
     String currentContentFolder_;
 
     // When operating with context menu

+ 0 - 2
Source/AtomicEditor/Source/UI/UIResourceFrame.cpp

@@ -279,7 +279,6 @@ bool ResourceFrame::ConsoleWidgetVisible()
 
 }
 
-
 void ResourceFrame::ShowConsoleWidget(bool show)
 {
     if (show && ErrorsWidgetVisible())
@@ -308,7 +307,6 @@ void ResourceFrame::ShowConsoleWidget(bool show)
             resourceLayout_->RemoveChild(child);
     }
 
-
 }
 
 void ResourceFrame::NavigateToResource(const String& fullpath, int lineNumber, int tokenPos)