Skip to content

Commit

Permalink
HackStudio: Project templates and New Project dialog
Browse files Browse the repository at this point in the history
This commit adds a simple project template system to HackStudio,
as well as a pretty New Project dialog, inspired by early VS.NET
and MS Office.
  • Loading branch information
nvella authored and awesomekling committed Feb 13, 2021
1 parent a6fdc17 commit b671577
Show file tree
Hide file tree
Showing 24 changed files with 1,178 additions and 1 deletion.
5 changes: 5 additions & 0 deletions Base/res/devel/templates/cpp-basic.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
[HackStudioTemplate]
Name=Command-line Application (C++)
Description=Template for creating a basic C++ command-line application.
Priority=95
IconName32x=cpp-basic
19 changes: 19 additions & 0 deletions Base/res/devel/templates/cpp-basic.postcreate
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#!/bin/sh

echo "PROGRAM = $1" >> $2/Makefile
echo "OBJS = main.o" >> $2/Makefile
echo "CXXFLAGS = -g -std=c++2a" >> $2/Makefile
echo "" >> $2/Makefile
echo "all: \$(PROGRAM)" >> $2/Makefile
echo "" >> $2/Makefile
echo "\$(PROGRAM): \$(OBJS)" >> $2/Makefile
echo " \$(CXX) -o \$@ \$(OBJS)" >> $2/Makefile
echo "" >> $2/Makefile
echo "%.o: %.cpp" >> $2/Makefile
echo " \$(CXX) \$(CXXFLAGS) -o \$@ -c \$< " >> $2/Makefile
echo "" >> $2/Makefile
echo "clean:" >> $2/Makefile
echo " rm \$(OBJS) \$(PROGRAM)" >> $2/Makefile
echo "" >> $2/Makefile
echo "run:" >> $2/Makefile
echo " ./\$(PROGRAM)" >> $2/Makefile
7 changes: 7 additions & 0 deletions Base/res/devel/templates/cpp-basic/main.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#include <stdio.h>

int main(int argc, char** argv)
{
printf("Hello friends!\n");
return 0;
}
5 changes: 5 additions & 0 deletions Base/res/devel/templates/cpp-gui.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
[HackStudioTemplate]
Name=Graphical Application (C++)
Description=Template for creating a basic C++ graphical application.
Priority=90
IconName32x=cpp-gui
19 changes: 19 additions & 0 deletions Base/res/devel/templates/cpp-gui.postcreate
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#!/bin/sh

echo "PROGRAM = $1" >> $2/Makefile
echo "OBJS = main.o" >> $2/Makefile
echo "CXXFLAGS = -lgui -g -std=c++2a" >> $2/Makefile
echo "" >> $2/Makefile
echo "all: \$(PROGRAM)" >> $2/Makefile
echo "" >> $2/Makefile
echo "\$(PROGRAM): \$(OBJS)" >> $2/Makefile
echo " \$(CXX) \$(CXXFLAGS) -o \$@ \$(OBJS)" >> $2/Makefile
echo "" >> $2/Makefile
echo "%.o: %.cpp" >> $2/Makefile
echo " \$(CXX) \$(CXXFLAGS) -o \$@ -c \$< " >> $2/Makefile
echo "" >> $2/Makefile
echo "clean:" >> $2/Makefile
echo " rm \$(OBJS) \$(PROGRAM)" >> $2/Makefile
echo "" >> $2/Makefile
echo "run:" >> $2/Makefile
echo " ./\$(PROGRAM)" >> $2/Makefile
26 changes: 26 additions & 0 deletions Base/res/devel/templates/cpp-gui/main.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
#include <stdio.h>
#include <LibGUI/Application.h>
#include <LibGUI/Window.h>
#include <LibGUI/Button.h>
#include <LibGUI/MessageBox.h>

int main(int argc, char** argv)
{
auto app = GUI::Application::construct(argc, argv);

auto window = GUI::Window::construct();
window->set_title("Hello friends!");
window->resize(200, 100);

auto button = GUI::Button::construct();
button->set_text("Click me!");
button->on_click = [&](auto) {
GUI::MessageBox::show(window, "Hello friends!", ":^)");
};

window->set_main_widget(button);

window->show();

return app->exec();
}
4 changes: 4 additions & 0 deletions Base/res/devel/templates/cpp-library.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
[HackStudioTemplate]
Name=Shared Library (C++)
Description=Template for creating a C++ shared library.
IconName32x=cpp-library
49 changes: 49 additions & 0 deletions Base/res/devel/templates/cpp-library.postcreate
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
#!/bin/sh

# $1: Project name, filesystem safe
# $2: Project full path
# $3: Project name, namespace safe

# Generate Makefile
echo "LIBRARY = $1.so" >> $2/Makefile
echo "OBJS = Class1.o" >> $2/Makefile
echo "CXXFLAGS = -g -std=c++2a" >> $2/Makefile
echo "" >> $2/Makefile
echo "all: \$(LIBRARY)" >> $2/Makefile
echo "" >> $2/Makefile
echo "\$(LIBRARY): \$(OBJS)" >> $2/Makefile
echo " \$(CXX) -shared -o \$@ \$(OBJS)" >> $2/Makefile
echo "" >> $2/Makefile
echo "%.o: %.cpp" >> $2/Makefile
echo " \$(CXX) \$(CXXFLAGS) -fPIC -o \$@ -c \$< " >> $2/Makefile
echo "" >> $2/Makefile
echo "clean:" >> $2/Makefile
echo " rm \$(OBJS) \$(LIBRARY)" >> $2/Makefile
echo "" >> $2/Makefile

# Generate 'Class1' header file
echo "#pragma once" >> $2/Class1.h
echo "" >> $2/Class1.h
echo "namespace $3 {" >> $2/Class1.h
echo "" >> $2/Class1.h
echo "class Class1 {" >> $2/Class1.h
echo "public:" >> $2/Class1.h
echo " void hello();" >> $2/Class1.h
echo "};" >> $2/Class1.h
echo "" >> $2/Class1.h
echo "}" >> $2/Class1.h
echo "" >> $2/Class1.h

# Generate 'Class1' source file
echo "#include \"Class1.h\"" >> $2/Class1.cpp
echo "#include <stdio.h>" >> $2/Class1.cpp
echo "" >> $2/Class1.cpp
echo "namespace $3 {" >> $2/Class1.cpp
echo "" >> $2/Class1.cpp
echo "void Class1::hello()" >> $2/Class1.cpp
echo "{" >> $2/Class1.cpp
echo " printf(\"Hello friends! :^)\\n\");" >> $2/Class1.cpp
echo "}" >> $2/Class1.cpp
echo "" >> $2/Class1.cpp
echo "}" >> $2/Class1.cpp
echo "" >> $2/Class1.cpp
5 changes: 5 additions & 0 deletions Base/res/devel/templates/empty.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
[HackStudioTemplate]
Name=Empty Project
Description=Template for creating an empty project with no files.
Priority=100
IconName32x=empty
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions Meta/build-root-filesystem.sh
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ chmod 4750 mnt/bin/keymap
chown 0:$utmp_gid mnt/bin/utmpupdate
chmod 2755 mnt/bin/utmpupdate
chmod 600 mnt/etc/shadow
chmod 755 mnt/res/devel/templates/*.postcreate
echo "done"

printf "creating initial filesystem structure... "
Expand Down
8 changes: 7 additions & 1 deletion Userland/DevTools/HackStudio/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
add_subdirectory(LanguageServers)
add_subdirectory(LanguageClients)

compile_gml(Dialogs/NewProjectDialog.gml Dialogs/NewProjectDialogGML.h new_project_dialog_gml)

set(SOURCES
CodeDocument.cpp
CursorTool.cpp
Expand All @@ -11,6 +13,9 @@ set(SOURCES
Debugger/DisassemblyWidget.cpp
Debugger/RegistersModel.cpp
Debugger/VariablesModel.cpp
Dialogs/NewProjectDialog.cpp
Dialogs/NewProjectDialogGML.h
Dialogs/ProjectTemplatesModel.cpp
Editor.cpp
EditorWrapper.cpp
FindInFilesWidget.cpp
Expand All @@ -26,12 +31,13 @@ set(SOURCES
Locator.cpp
Project.cpp
ProjectFile.cpp
ProjectTemplate.cpp
TerminalWrapper.cpp
WidgetTool.cpp
WidgetTreeModel.cpp
main.cpp
)

serenity_app(HackStudio ICON app-hack-studio)
target_link_libraries(HackStudio LibWeb LibMarkdown LibGUI LibCpp LibGfx LibCore LibVT LibDebug LibX86 LibDiff LibShell)
target_link_libraries(HackStudio LibWeb LibMarkdown LibGUI LibCpp LibGfx LibCore LibVT LibDebug LibX86 LibDiff LibShell LibRegex)
add_dependencies(HackStudio CppLanguageServer)
Loading

0 comments on commit b671577

Please sign in to comment.