studio window

This commit is contained in:
floralrainfall 2023-07-06 22:19:20 -04:00
parent 15e6ae1c32
commit d41e78045b
6 changed files with 59 additions and 14 deletions

View File

@ -5,7 +5,7 @@ project(player)
project(server)
project(studio)
find_package(Qt6 REQUIRED COMPONENTS Core)
find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets OpenGLWidgets)
find_package(Boost REQUIRED)
qt_standard_project_setup()
@ -29,12 +29,15 @@ add_executable(server
)
qt_add_executable(studio
src/client/studio/studiowindow.cpp
src/client/studio/studiowindow.hpp
src/client/studio/main.cpp
)
target_include_directories(engine PUBLIC src/include)
target_link_libraries(engine PUBLIC ${BOOST_LIBRARIES})
target_link_libraries(player PRIVATE Qt6::Core engine)
target_link_libraries(studio PRIVATE Qt6::Core engine)
set(QT6_LIBRARIES_INCL Qt6::Core Qt6::Gui Qt6::Widgets Qt6::OpenGLWidgets)
target_link_libraries(player PRIVATE ${QT6_LIBRARIES_INCL} engine)
target_link_libraries(studio PRIVATE ${QT6_LIBRARIES_INCL} engine)
target_link_libraries(server PRIVATE engine)

View File

@ -1,6 +1,14 @@
#include <stdio.h>
int main()
#include <QApplication>
#include "studiowindow.hpp"
int main(int argc, char** argv)
{
printf("Hello world!");
QApplication a(argc, argv);
StudioWindow window = StudioWindow();
window.show();
return a.exec();
}

View File

@ -0,0 +1,14 @@
#include "studiowindow.hpp"
StudioWindow::StudioWindow()
{
setWindowTitle(QString("RBXNu Studio"));
setWindowIcon(QIcon(":/content/images/icon.png"));
studio_graphic_timer.start();
}
void StudioWindow::closeEvent(QCloseEvent* event)
{
}

View File

@ -0,0 +1,16 @@
#ifndef __CLIENT_STUDIO_STUDIOWINDOW_HPP__
#define __CLIENT_STUDIO_STUDIOWINDOW_HPP__
#include <QMainWindow>
#include <QOpenGLWidget>
class StudioWindow : public QMainWindow
{
Q_OBJECT
public:
StudioWindow();
protected:
void closeEvent(QCloseEvent* event);
};
#endif

View File

@ -1,4 +1,5 @@
#include <engine/app/v8/tree/Instance.hpp>
#include <stdexcept>
RBX::Instance::Instance()
{
@ -37,9 +38,9 @@ bool RBX::Instance::askAddChild(RBX::Instance* instance)
bool RBX::Instance::canAddChild(RBX::Instance* instance)
{
if(instance->contains(this) || instance->parent == this)
if(instance->contains(this) || instance->m_parent == this)
return false;
if(askAddC hild(instance))
if(askAddChild(instance))
return true;
return instance->askSetParent(this);
}
@ -57,19 +58,22 @@ void RBX::Instance::setParent(RBX::Instance* newParent)
{
if(newParent != m_parent)
{
char error_text[255];
if(this == newParent)
{
throw std::runtime_error("Attempt to set %s as its own parent", m_name);
snprintf(error_text, 255, "Attempt to set %s as its own parent", m_name);
throw std::runtime_error(error_text);
}
if(isAncestorOf(newParent))
{
throw std::runtime_error("Attempt to set parent of %s to %s results in circular reference", newParent->getName(), m_name);
snprintf(error_text, 255, "Attempt to set parent of %s to %s results in circular reference", newParent->getName(), m_name);
throw std::runtime_error(error_text);
}
if(m_parent)
{
std::vector<boost::shared_ptr<RBX::Instance>>* children = m_parent->getChildren();
auto child_it = std::find(children->begin(), children->end(), this);
auto child_it = std::find(children->begin(), children->end(), (boost::shared_ptr<RBX::Instance>)this);
if(child_it != children->end())
children->erase(child_it);
if(m_parent->numChildren() == 0)
@ -79,7 +83,7 @@ void RBX::Instance::setParent(RBX::Instance* newParent)
}
m_parent = newParent;
m_parent->children.push_back(this);
m_parent->m_children.push_back((boost::shared_ptr<RBX::Instance>)this);
newParent->onChildAdded(this);
}
}

View File

@ -16,7 +16,7 @@ namespace RBX
bool m_archivable;
public:
Instance();
Instance(char* name);
Instance(std::string name);
bool contains(RBX::Instance* child);
bool isAncestorOf(RBX::Instance* instance);
@ -29,12 +29,12 @@ namespace RBX
void createChild(boost::shared_ptr<RBX::Instance>* result, const RBX::Name *className);
RBX::Instance* getParent() { return this->m_parent; };
std::string getName() { return this->m_name };
std::string getName() { return this->m_name; };
void setParent(RBX::Instance* newParent);
void setName(std::string name);
std::vector<boost::shared_ptr<RBX::Instance>>* getChildren() { return &this->m_children; };
int numChildren() { return this->m_children.size() };
int numChildren() { return this->m_children.size(); };
void onChildAdded(RBX::Instance* childAdded);