Initial commit.
This commit is contained in:
commit
59c6161fdb
134 changed files with 4751 additions and 0 deletions
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
.cproject
|
||||
.project
|
||||
.settings/
|
11
CMakeLists.txt
Normal file
11
CMakeLists.txt
Normal file
|
@ -0,0 +1,11 @@
|
|||
cmake_minimum_required(VERSION 3.10)
|
||||
|
||||
# set the project name
|
||||
project(media-tools)
|
||||
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED True)
|
||||
link_libraries(stdc++fs)
|
||||
|
||||
add_subdirectory(src)
|
||||
add_subdirectory(apps)
|
32
apps/CMakeLists.txt
Normal file
32
apps/CMakeLists.txt
Normal file
|
@ -0,0 +1,32 @@
|
|||
# Sample GUI
|
||||
add_executable(sample_gui gui-main.cpp)
|
||||
target_include_directories(sample_gui PUBLIC
|
||||
"${PROJECT_SOURCE_DIR}/src/console"
|
||||
"${PROJECT_SOURCE_DIR}/src/client"
|
||||
)
|
||||
target_link_libraries(sample_gui PUBLIC client windows console core
|
||||
network database geometry audio graphics)
|
||||
|
||||
# Sample Console
|
||||
add_executable(sample_console console-main.cpp)
|
||||
target_include_directories(sample_console PUBLIC
|
||||
"${PROJECT_SOURCE_DIR}/src/console"
|
||||
)
|
||||
target_link_libraries(sample_console PUBLIC console core network
|
||||
database geometry audio)
|
||||
|
||||
# Xml practice
|
||||
add_executable(xml_practice xml-practice.cpp)
|
||||
target_include_directories(xml_practice PUBLIC
|
||||
"${PROJECT_SOURCE_DIR}/src/core"
|
||||
"${PROJECT_SOURCE_DIR}/src/core/xml"
|
||||
)
|
||||
target_link_libraries(xml_practice PUBLIC core)
|
||||
|
||||
# Markdown practice
|
||||
add_executable(markdown_practice markdown-practice.cpp)
|
||||
target_include_directories(markdown_practice PUBLIC
|
||||
"${PROJECT_SOURCE_DIR}/src/core"
|
||||
"${PROJECT_SOURCE_DIR}/src/web/markdown"
|
||||
)
|
||||
target_link_libraries(markdown_practice PUBLIC web core)
|
16
apps/console-main.cpp
Normal file
16
apps/console-main.cpp
Normal file
|
@ -0,0 +1,16 @@
|
|||
#include <filesystem>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "MainApplication.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
// Start the main app
|
||||
auto main_app = MainApplication::Create();
|
||||
main_app->Initialize(std::filesystem::current_path());
|
||||
|
||||
//main_app->RunServer();
|
||||
main_app->PlayAudio();
|
||||
main_app->ShutDown();
|
||||
return 0;
|
||||
}
|
20
apps/gui-main.cpp
Normal file
20
apps/gui-main.cpp
Normal file
|
@ -0,0 +1,20 @@
|
|||
#include <filesystem>
|
||||
#include <memory>
|
||||
|
||||
#include "GuiApplication.h"
|
||||
#include "MainApplication.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
// Start the main app
|
||||
auto main_app = MainApplication::Create();
|
||||
main_app->Initialize(std::filesystem::current_path());
|
||||
|
||||
// Start the gui app
|
||||
auto gui_app = std::make_shared<GuiApplication>();
|
||||
gui_app->SetMainApplication(main_app);
|
||||
gui_app->Run();
|
||||
|
||||
main_app->ShutDown();
|
||||
return 0;
|
||||
}
|
47
apps/markdown-practice.cpp
Normal file
47
apps/markdown-practice.cpp
Normal file
|
@ -0,0 +1,47 @@
|
|||
#include <filesystem>
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <ostream>
|
||||
#include "CommandLineArgs.h"
|
||||
#include "MarkdownParser.h"
|
||||
#include "HtmlDocument.h"
|
||||
#include "HtmlWriter.h"
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
CommandLineArgs command_line_args;
|
||||
command_line_args.Process(argc, argv);
|
||||
|
||||
if(command_line_args.GetNumberOfArgs() < 2)
|
||||
{
|
||||
std::cerr << "Expected a filepath argument" << std::endl;
|
||||
return -1;
|
||||
}
|
||||
|
||||
MarkdownParser parser;
|
||||
const auto filepath = command_line_args.GetArg(1);
|
||||
|
||||
if(!std::filesystem::exists(filepath))
|
||||
{
|
||||
std::cerr << "Couldn't find file: " << filepath << std::endl;
|
||||
return -1;
|
||||
}
|
||||
|
||||
std::ifstream md_file;
|
||||
md_file.open(filepath, std::ifstream::in);
|
||||
while(md_file.good())
|
||||
{
|
||||
std::string line;
|
||||
std::getline(md_file, line);
|
||||
parser.ProcessLine(line);
|
||||
}
|
||||
md_file.close();
|
||||
|
||||
auto html_document = parser.GetHtml();
|
||||
HtmlWriter writer;
|
||||
std::string html_string = writer.ToString(html_document);
|
||||
std::ofstream out("/home/james/test.html");
|
||||
out << html_string;
|
||||
out.close();
|
||||
return 0;
|
||||
}
|
38
apps/xml-practice.cpp
Normal file
38
apps/xml-practice.cpp
Normal file
|
@ -0,0 +1,38 @@
|
|||
#include <filesystem>
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include "CommandLineArgs.h"
|
||||
#include "XmlParser.h"
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
CommandLineArgs command_line_args;
|
||||
command_line_args.Process(argc, argv);
|
||||
|
||||
if(command_line_args.GetNumberOfArgs() < 2)
|
||||
{
|
||||
std::cerr << "Expected a filepath argument" << std::endl;
|
||||
return -1;
|
||||
}
|
||||
|
||||
XmlParser parser;
|
||||
const auto filepath = command_line_args.GetArg(1);
|
||||
|
||||
if(!std::filesystem::exists(filepath))
|
||||
{
|
||||
std::cerr << "Couldn't find file: " << filepath << std::endl;
|
||||
return -1;
|
||||
}
|
||||
|
||||
std::ifstream xml_file;
|
||||
xml_file.open(filepath, std::ifstream::in);
|
||||
while(xml_file.good())
|
||||
{
|
||||
std::string line;
|
||||
std::getline(xml_file, line);
|
||||
parser.ProcessLine(line);
|
||||
}
|
||||
xml_file.close();
|
||||
|
||||
return 0;
|
||||
}
|
11
src/CMakeLists.txt
Normal file
11
src/CMakeLists.txt
Normal file
|
@ -0,0 +1,11 @@
|
|||
add_subdirectory(core)
|
||||
add_subdirectory(database)
|
||||
add_subdirectory(network)
|
||||
add_subdirectory(geometry)
|
||||
add_subdirectory(audio)
|
||||
add_subdirectory(console)
|
||||
add_subdirectory(client)
|
||||
add_subdirectory(graphics)
|
||||
add_subdirectory(windows)
|
||||
add_subdirectory(web)
|
||||
add_subdirectory(ui_elements)
|
71
src/audio/AudioDevice.cpp
Normal file
71
src/audio/AudioDevice.cpp
Normal file
|
@ -0,0 +1,71 @@
|
|||
#include "AudioDevice.h"
|
||||
|
||||
AudioDevice::AudioDevice()
|
||||
: mName("plughw:1,0"),
|
||||
mSampleRate(44100),
|
||||
mNumChannels(2),
|
||||
mPeriod(2),
|
||||
mBufferSize()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
AudioDevice::~AudioDevice()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
std::shared_ptr<AudioDevice> AudioDevice::Create()
|
||||
{
|
||||
return std::make_shared<AudioDevice>();
|
||||
}
|
||||
|
||||
void AudioDevice::SetNumChannels(unsigned numChannels)
|
||||
{
|
||||
mNumChannels = numChannels;
|
||||
}
|
||||
|
||||
void AudioDevice::SetPeriod(unsigned period)
|
||||
{
|
||||
mPeriod = period;
|
||||
}
|
||||
|
||||
void AudioDevice::SetBufferSize(std::size_t bufferSize)
|
||||
{
|
||||
mBufferSize = bufferSize;
|
||||
}
|
||||
|
||||
unsigned AudioDevice::GetNumChannels()
|
||||
{
|
||||
return mNumChannels;
|
||||
}
|
||||
|
||||
unsigned AudioDevice::GetPeriod()
|
||||
{
|
||||
return mPeriod;
|
||||
}
|
||||
|
||||
std::size_t AudioDevice::GetBufferSize()
|
||||
{
|
||||
return mBufferSize;
|
||||
}
|
||||
|
||||
void AudioDevice::SetSampleRate(unsigned rate)
|
||||
{
|
||||
mSampleRate = rate;
|
||||
}
|
||||
|
||||
unsigned AudioDevice::GetSampleRate()
|
||||
{
|
||||
return mSampleRate;
|
||||
}
|
||||
|
||||
void AudioDevice::SetName(const std::string& name)
|
||||
{
|
||||
mName = name;
|
||||
}
|
||||
|
||||
std::string AudioDevice::GetName()
|
||||
{
|
||||
return mName;
|
||||
}
|
46
src/audio/AudioDevice.h
Normal file
46
src/audio/AudioDevice.h
Normal file
|
@ -0,0 +1,46 @@
|
|||
#pragma once
|
||||
|
||||
#include <memory>
|
||||
#include <string>
|
||||
|
||||
class AudioDevice
|
||||
{
|
||||
|
||||
private:
|
||||
|
||||
std::string mName;
|
||||
unsigned mSampleRate;
|
||||
unsigned mNumChannels;
|
||||
unsigned mPeriod;
|
||||
std::size_t mBufferSize;
|
||||
|
||||
public:
|
||||
|
||||
AudioDevice();
|
||||
|
||||
~AudioDevice();
|
||||
|
||||
void SetSampleRate(unsigned rate);
|
||||
|
||||
unsigned GetSampleRate();
|
||||
|
||||
void SetName(const std::string& name);
|
||||
|
||||
void SetNumChannels(unsigned numChannels);
|
||||
|
||||
void SetPeriod(unsigned period);
|
||||
|
||||
void SetBufferSize(std::size_t bufferSize);
|
||||
|
||||
unsigned GetNumChannels();
|
||||
|
||||
unsigned GetPeriod();
|
||||
|
||||
std::size_t GetBufferSize();
|
||||
|
||||
std::string GetName();
|
||||
|
||||
static std::shared_ptr<AudioDevice> Create();
|
||||
};
|
||||
|
||||
using AudioDevicePtr = std::shared_ptr<AudioDevice>;
|
33
src/audio/AudioManager.cpp
Normal file
33
src/audio/AudioManager.cpp
Normal file
|
@ -0,0 +1,33 @@
|
|||
#include "AudioManager.h"
|
||||
|
||||
AudioManager::AudioManager()
|
||||
: mAudioDevices(),
|
||||
mAudioInterface()
|
||||
{
|
||||
mAudioInterface = AlsaInterface::Create();
|
||||
}
|
||||
|
||||
AudioManager::~AudioManager()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
std::shared_ptr<AudioManager> AudioManager::Create()
|
||||
{
|
||||
return std::make_shared<AudioManager>();
|
||||
}
|
||||
|
||||
void AudioManager::AddAudioDevice(AudioDevicePtr device)
|
||||
{
|
||||
mAudioDevices.push_back(device);
|
||||
}
|
||||
|
||||
AlsaInterfacePtr AudioManager::GetAudioInterface()
|
||||
{
|
||||
return mAudioInterface;
|
||||
}
|
||||
|
||||
std::vector<AudioDevicePtr> AudioManager::GetAudioDevices()
|
||||
{
|
||||
return mAudioDevices;
|
||||
}
|
32
src/audio/AudioManager.h
Normal file
32
src/audio/AudioManager.h
Normal file
|
@ -0,0 +1,32 @@
|
|||
#pragma once
|
||||
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
|
||||
#include "AlsaInterface.h"
|
||||
#include "AudioDevice.h"
|
||||
|
||||
class AudioManager
|
||||
{
|
||||
|
||||
private:
|
||||
|
||||
std::vector<AudioDevicePtr> mAudioDevices;
|
||||
AlsaInterfacePtr mAudioInterface;
|
||||
|
||||
public:
|
||||
|
||||
AudioManager();
|
||||
|
||||
~AudioManager();
|
||||
|
||||
static std::shared_ptr<AudioManager> Create();
|
||||
|
||||
void AddAudioDevice(AudioDevicePtr device);
|
||||
|
||||
std::vector<AudioDevicePtr> GetAudioDevices();
|
||||
|
||||
AlsaInterfacePtr GetAudioInterface();
|
||||
};
|
||||
|
||||
using AudioManagerPtr = std::shared_ptr<AudioManager>;
|
13
src/audio/CMakeLists.txt
Normal file
13
src/audio/CMakeLists.txt
Normal file
|
@ -0,0 +1,13 @@
|
|||
list(APPEND audio_LIB_INCLUDES
|
||||
AudioDevice.cpp
|
||||
AudioManager.cpp
|
||||
audio_interfaces/AlsaInterface.cpp)
|
||||
|
||||
|
||||
add_library(audio SHARED ${audio_LIB_INCLUDES})
|
||||
target_include_directories(audio PUBLIC
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/audio_interfaces"
|
||||
)
|
||||
|
||||
target_link_libraries(audio PUBLIC asound)
|
141
src/audio/audio_interfaces/AlsaInterface.cpp
Normal file
141
src/audio/audio_interfaces/AlsaInterface.cpp
Normal file
|
@ -0,0 +1,141 @@
|
|||
#include "AlsaInterface.h"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
AlsaInterface::AlsaInterface()
|
||||
:mHandle(),
|
||||
mHardwareParams(),
|
||||
mPeriodSize(8192)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
AlsaInterface::~AlsaInterface()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
std::shared_ptr<AlsaInterface> AlsaInterface::Create()
|
||||
{
|
||||
return std::make_shared<AlsaInterface>();
|
||||
}
|
||||
|
||||
void AlsaInterface::OpenDevice(AudioDevicePtr device)
|
||||
{
|
||||
snd_pcm_stream_t stream = SND_PCM_STREAM_PLAYBACK;
|
||||
if (snd_pcm_open(&mHandle, device->GetName().c_str(), stream, 0) < 0)
|
||||
{
|
||||
std::cerr << "Error opening PCM device: " << device->GetName() << std::endl;
|
||||
return;
|
||||
}
|
||||
|
||||
snd_pcm_hw_params_alloca(&mHardwareParams);
|
||||
if (snd_pcm_hw_params_any(mHandle, mHardwareParams) < 0)
|
||||
{
|
||||
std::cerr << "Can not configure this PCM device.\n" << std::endl;
|
||||
return;
|
||||
}
|
||||
|
||||
SetAccessType(device);
|
||||
SetSampleFormat(device);
|
||||
SetSampleRate(device);
|
||||
SetPeriod(device);
|
||||
SetBufferSize(device);
|
||||
SetChannelNumber(device);
|
||||
|
||||
/* Apply HW parameter settings to */
|
||||
/* PCM device and prepare device */
|
||||
if (snd_pcm_hw_params(mHandle, mHardwareParams) < 0) {
|
||||
std::cerr << "Error setting HW params." << std::endl;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
void AlsaInterface::SetAccessType(AudioDevicePtr device)
|
||||
{
|
||||
if (snd_pcm_hw_params_set_access(mHandle, mHardwareParams, SND_PCM_ACCESS_RW_INTERLEAVED) < 0) {
|
||||
std::cerr << "Error setting device access." << std::endl;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
void AlsaInterface::SetSampleFormat(AudioDevicePtr device)
|
||||
{
|
||||
/* Set sample format */
|
||||
if (snd_pcm_hw_params_set_format(mHandle, mHardwareParams, SND_PCM_FORMAT_S16_LE) < 0) {
|
||||
std::cerr << "Error setting format. " << std::endl;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
void AlsaInterface::SetSampleRate(AudioDevicePtr device)
|
||||
{
|
||||
unsigned rate = device->GetSampleRate();
|
||||
unsigned exact_rate = rate;
|
||||
if (snd_pcm_hw_params_set_rate_near(mHandle, mHardwareParams, &exact_rate, 0) < 0)
|
||||
{
|
||||
std::cerr << "Error setting rate. " << std::endl;
|
||||
return;
|
||||
}
|
||||
if (rate != exact_rate) {
|
||||
std::cerr << "The rate is not supported by your hardware." << std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
void AlsaInterface::SetPeriod(AudioDevicePtr device)
|
||||
{
|
||||
/* Set number of periods. Periods used to be called fragments. */
|
||||
if (snd_pcm_hw_params_set_periods(mHandle, mHardwareParams, device->GetPeriod(), 0) < 0)
|
||||
{
|
||||
std::cerr << "Error setting periods. " << std::endl;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
void AlsaInterface::SetBufferSize(AudioDevicePtr device)
|
||||
{
|
||||
snd_pcm_uframes_t periodsize = 8192; /* Periodsize (bytes) */
|
||||
int periods = static_cast<int>(device->GetPeriod());
|
||||
|
||||
/* Set buffer size (in frames). The resulting latency is given by */
|
||||
/* latency = periodsize * periods / (rate * bytes_per_frame) */
|
||||
if (snd_pcm_hw_params_set_buffer_size(mHandle, mHardwareParams, (mPeriodSize * periods)>>2) < 0)
|
||||
{
|
||||
std::cerr << "Error setting buffersize. " << std::endl;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
void AlsaInterface::SetChannelNumber(AudioDevicePtr device)
|
||||
{
|
||||
/* Set number of channels */
|
||||
if (snd_pcm_hw_params_set_channels(mHandle, mHardwareParams, device->GetNumChannels()) < 0)
|
||||
{
|
||||
std::cout << "Error setting channels" << std::endl;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
void AlsaInterface::Play(AudioDevicePtr device)
|
||||
{
|
||||
int num_frames = 10;
|
||||
unsigned char *data = (unsigned char *)malloc(mPeriodSize);
|
||||
int frames = mPeriodSize >> 2;
|
||||
for(int l1 = 0; l1 < 100; l1++)
|
||||
{
|
||||
for(int l2 = 0; l2 < num_frames; l2++)
|
||||
{
|
||||
short s1 = (l2 % 128) * 100 - 5000;
|
||||
short s2 = (l2 % 256) * 100 - 5000;
|
||||
data[4*l2] = (unsigned char)s1;
|
||||
data[4*l2+1] = s1 >> 8;
|
||||
data[4*l2+2] = (unsigned char)s2;
|
||||
data[4*l2+3] = s2 >> 8;
|
||||
}
|
||||
while ((snd_pcm_writei(mHandle, data, frames)) < 0)
|
||||
{
|
||||
snd_pcm_prepare(mHandle);
|
||||
fprintf(stderr, "<<<<<<<<<<<<<<< Buffer Underrun >>>>>>>>>>>>>>>\n");
|
||||
}
|
||||
}
|
||||
}
|
39
src/audio/audio_interfaces/AlsaInterface.h
Normal file
39
src/audio/audio_interfaces/AlsaInterface.h
Normal file
|
@ -0,0 +1,39 @@
|
|||
#pragma once
|
||||
|
||||
#include <memory>
|
||||
#include <alsa/asoundlib.h>
|
||||
|
||||
#include "AudioDevice.h"
|
||||
|
||||
class AlsaInterface
|
||||
{
|
||||
snd_pcm_t* mHandle;
|
||||
snd_pcm_hw_params_t* mHardwareParams;
|
||||
snd_pcm_uframes_t mPeriodSize;
|
||||
|
||||
public:
|
||||
|
||||
AlsaInterface();
|
||||
|
||||
~AlsaInterface();
|
||||
|
||||
static std::shared_ptr<AlsaInterface> Create();
|
||||
|
||||
void OpenDevice(AudioDevicePtr device);
|
||||
|
||||
void SetAccessType(AudioDevicePtr device);
|
||||
|
||||
void SetSampleFormat(AudioDevicePtr device);
|
||||
|
||||
void SetSampleRate(AudioDevicePtr device);
|
||||
|
||||
void SetPeriod(AudioDevicePtr device);
|
||||
|
||||
void SetBufferSize(AudioDevicePtr device);
|
||||
|
||||
void SetChannelNumber(AudioDevicePtr device);
|
||||
|
||||
void Play(AudioDevicePtr device);
|
||||
};
|
||||
|
||||
using AlsaInterfacePtr = std::shared_ptr<AlsaInterface>;
|
10
src/client/CMakeLists.txt
Normal file
10
src/client/CMakeLists.txt
Normal file
|
@ -0,0 +1,10 @@
|
|||
list(APPEND client_LIB_INCLUDES GuiApplication.cpp)
|
||||
|
||||
add_library(client SHARED ${client_LIB_INCLUDES})
|
||||
|
||||
target_link_libraries(client ui_elements windows core console database geometry)
|
||||
|
||||
target_include_directories(client PUBLIC
|
||||
"${PROJECT_SOURCE_DIR}/src/console"
|
||||
"${PROJECT_SOURCE_DIR}/src/ui_elements/widgets"
|
||||
)
|
70
src/client/GuiApplication.cpp
Normal file
70
src/client/GuiApplication.cpp
Normal file
|
@ -0,0 +1,70 @@
|
|||
#include "GuiApplication.h"
|
||||
|
||||
#include <iostream>
|
||||
#include "Widget.h"
|
||||
#include "HorizontalSpacer.h"
|
||||
#include "Button.h"
|
||||
#include "Label.h"
|
||||
#include "XcbInterface.h"
|
||||
#include "XcbKeyboard.h"
|
||||
#include "Window.h"
|
||||
#include "TextElement.h"
|
||||
#include "WindowManager.h"
|
||||
|
||||
GuiApplication::GuiApplication()
|
||||
: AbstractDesktopApp(),
|
||||
mMainApplication(),
|
||||
mDesktopManager()
|
||||
{
|
||||
mDesktopManager = DesktopManager::Create();
|
||||
}
|
||||
|
||||
GuiApplication::~GuiApplication()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void GuiApplication::SetMainApplication(MainApplicationPtr app)
|
||||
{
|
||||
mMainApplication = app;
|
||||
//mDesktopManager->SetMainApp(shared_from_this());
|
||||
}
|
||||
|
||||
void GuiApplication::Run()
|
||||
{
|
||||
auto mainWindow = mDesktopManager->GetWindowManager()->GetMainWindow();
|
||||
|
||||
mainWindow->SetSize(800, 600);
|
||||
|
||||
auto label = Label::Create();
|
||||
label->SetLabel("Click the button!!");
|
||||
label->SetBackgroundColor(Color::Create(0, 200, 200));
|
||||
|
||||
auto button = Button::Create();
|
||||
button->SetLabel("Ok");
|
||||
button->SetBackgroundColor(Color::Create(0, 0, 200));
|
||||
|
||||
auto spacer = HorizontalSpacer::Create();
|
||||
spacer->AddWidget(label);
|
||||
spacer->AddWidget(button);
|
||||
|
||||
mainWindow->AddWidget(spacer);
|
||||
|
||||
mDesktopManager->SetKeyboard(XcbKeyboard::Create());
|
||||
|
||||
bool useOpenGl = false;
|
||||
XcbInterface window_interface;
|
||||
window_interface.SetUseOpenGl(useOpenGl);
|
||||
window_interface.Initialize();
|
||||
window_interface.AddWindow(mainWindow);
|
||||
window_interface.ShowWindow(mainWindow);
|
||||
if(useOpenGl)
|
||||
{
|
||||
window_interface.CreateOpenGlDrawable(mainWindow);
|
||||
}
|
||||
|
||||
window_interface.Loop(mDesktopManager);
|
||||
|
||||
window_interface.ShutDown();
|
||||
|
||||
}
|
26
src/client/GuiApplication.h
Normal file
26
src/client/GuiApplication.h
Normal file
|
@ -0,0 +1,26 @@
|
|||
#pragma once
|
||||
|
||||
#include <memory>
|
||||
|
||||
#include "MainApplication.h"
|
||||
#include "AbstractDesktopApp.h"
|
||||
#include "DesktopManager.h"
|
||||
|
||||
class GuiApplication : public AbstractDesktopApp, std::enable_shared_from_this<GuiApplication>
|
||||
{
|
||||
|
||||
private:
|
||||
|
||||
DesktopManagerPtr mDesktopManager;
|
||||
MainApplicationPtr mMainApplication;
|
||||
|
||||
public:
|
||||
|
||||
GuiApplication();
|
||||
|
||||
~GuiApplication();
|
||||
|
||||
void SetMainApplication(MainApplicationPtr app);
|
||||
|
||||
void Run();
|
||||
};
|
13
src/console/CMakeLists.txt
Normal file
13
src/console/CMakeLists.txt
Normal file
|
@ -0,0 +1,13 @@
|
|||
list(APPEND console_LIB_INCLUDES MainApplication.cpp)
|
||||
|
||||
add_library(console SHARED ${console_LIB_INCLUDES})
|
||||
|
||||
target_include_directories(console PUBLIC
|
||||
"${PROJECT_SOURCE_DIR}/src/core/loggers"
|
||||
"${PROJECT_SOURCE_DIR}/src/database"
|
||||
"${PROJECT_SOURCE_DIR}/src/database/database_interfaces"
|
||||
"${PROJECT_SOURCE_DIR}/src/network"
|
||||
"${PROJECT_SOURCE_DIR}/src/network/sockets"
|
||||
"${PROJECT_SOURCE_DIR}/src/audio"
|
||||
"${PROJECT_SOURCE_DIR}/src/audio/audio_interfaces"
|
||||
)
|
52
src/console/MainApplication.cpp
Normal file
52
src/console/MainApplication.cpp
Normal file
|
@ -0,0 +1,52 @@
|
|||
#include "MainApplication.h"
|
||||
|
||||
MainApplication::MainApplication()
|
||||
:mLogger(),
|
||||
mDatabaseManager()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
MainApplication::~MainApplication()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void MainApplication::Initialize(const std::filesystem::path& workDir)
|
||||
{
|
||||
mLogger = FileLogger::Create();
|
||||
mLogger->SetWorkDirectory(workDir.string());
|
||||
mLogger->Open();
|
||||
mLogger->LogLine("Launched");
|
||||
|
||||
mDatabaseManager = DatabaseManager::Create();
|
||||
mDatabaseManager->CreateDatabase(workDir.string() + "/database.db");
|
||||
|
||||
mNetworkManager = NetworkManager::Create();
|
||||
|
||||
mAudioManager = AudioManager::Create();
|
||||
}
|
||||
|
||||
void MainApplication::RunServer()
|
||||
{
|
||||
mNetworkManager->RunHttpServer();
|
||||
}
|
||||
|
||||
void MainApplication::PlayAudio()
|
||||
{
|
||||
auto device = AudioDevice::Create();
|
||||
mAudioManager->GetAudioInterface()->OpenDevice(device);
|
||||
mAudioManager->GetAudioInterface()->Play(device);
|
||||
}
|
||||
|
||||
void MainApplication::ShutDown()
|
||||
{
|
||||
mLogger->Close();
|
||||
mDatabaseManager->OnShutDown();
|
||||
mNetworkManager->ShutDown();
|
||||
}
|
||||
|
||||
std::shared_ptr<MainApplication> MainApplication::Create()
|
||||
{
|
||||
return std::make_shared<MainApplication>();
|
||||
}
|
37
src/console/MainApplication.h
Normal file
37
src/console/MainApplication.h
Normal file
|
@ -0,0 +1,37 @@
|
|||
#pragma once
|
||||
|
||||
#include <memory>
|
||||
#include <filesystem>
|
||||
|
||||
#include "AudioManager.h"
|
||||
#include "FileLogger.h"
|
||||
#include "DatabaseManager.h"
|
||||
#include "NetworkManager.h"
|
||||
|
||||
class MainApplication
|
||||
{
|
||||
private:
|
||||
|
||||
FileLoggerPtr mLogger;
|
||||
DatabaseManagerPtr mDatabaseManager;
|
||||
NetworkManagerPtr mNetworkManager;
|
||||
AudioManagerPtr mAudioManager;
|
||||
|
||||
public:
|
||||
|
||||
MainApplication();
|
||||
|
||||
~MainApplication();
|
||||
|
||||
void Initialize(const std::filesystem::path& workDir);
|
||||
|
||||
void RunServer();
|
||||
|
||||
void PlayAudio();
|
||||
|
||||
void ShutDown();
|
||||
|
||||
static std::shared_ptr<MainApplication> Create();
|
||||
};
|
||||
|
||||
using MainApplicationPtr = std::shared_ptr<MainApplication>;
|
13
src/core/CMakeLists.txt
Normal file
13
src/core/CMakeLists.txt
Normal file
|
@ -0,0 +1,13 @@
|
|||
list(APPEND core_LIB_INCLUDES
|
||||
Event.cpp
|
||||
Color.cpp
|
||||
CommandLineArgs.cpp
|
||||
loggers/FileLogger.cpp
|
||||
StringUtils.cpp)
|
||||
|
||||
# add the executable
|
||||
add_library(core SHARED ${core_LIB_INCLUDES})
|
||||
|
||||
target_include_directories(core PUBLIC
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}"
|
||||
)
|
36
src/core/Color.cpp
Normal file
36
src/core/Color.cpp
Normal file
|
@ -0,0 +1,36 @@
|
|||
#include "Color.h"
|
||||
|
||||
Color::Color(unsigned r, unsigned g, unsigned b, double a)
|
||||
: mR(r),
|
||||
mG(g),
|
||||
mB(b),
|
||||
mAlpha(a)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
std::shared_ptr<Color> Color::Create(unsigned r, unsigned g, unsigned b,
|
||||
double a )
|
||||
{
|
||||
return std::make_shared<Color>(r, g, b, a);
|
||||
}
|
||||
|
||||
unsigned Color::GetR()
|
||||
{
|
||||
return mR;
|
||||
}
|
||||
|
||||
unsigned Color::GetG()
|
||||
{
|
||||
return mG;
|
||||
}
|
||||
|
||||
unsigned Color::GetB()
|
||||
{
|
||||
return mB;
|
||||
}
|
||||
|
||||
double Color::GetAlpha()
|
||||
{
|
||||
return mAlpha;
|
||||
}
|
23
src/core/Color.h
Normal file
23
src/core/Color.h
Normal file
|
@ -0,0 +1,23 @@
|
|||
#pragma once
|
||||
#include <memory>
|
||||
|
||||
class Color
|
||||
{
|
||||
unsigned mR;
|
||||
unsigned mG;
|
||||
unsigned mB;
|
||||
double mAlpha;
|
||||
|
||||
public:
|
||||
|
||||
Color(unsigned r, unsigned g, unsigned b, double a = 1.0);
|
||||
|
||||
static std::shared_ptr<Color> Create(unsigned r, unsigned g, unsigned b, double a = 1.0);
|
||||
|
||||
unsigned GetR();
|
||||
unsigned GetG();
|
||||
unsigned GetB();
|
||||
double GetAlpha();
|
||||
};
|
||||
|
||||
using ColorPtr = std::shared_ptr<Color>;
|
29
src/core/CommandLineArgs.cpp
Normal file
29
src/core/CommandLineArgs.cpp
Normal file
|
@ -0,0 +1,29 @@
|
|||
#include "CommandLineArgs.h"
|
||||
|
||||
CommandLineArgs::CommandLineArgs()
|
||||
: mArugments()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CommandLineArgs::Process(int argc, char *argv[])
|
||||
{
|
||||
for(int idx=0; idx<argc; idx++)
|
||||
{
|
||||
mArugments.push_back(std::string(argv[idx]));
|
||||
}
|
||||
}
|
||||
|
||||
std::size_t CommandLineArgs::GetNumberOfArgs() const
|
||||
{
|
||||
return mArugments.size();
|
||||
}
|
||||
|
||||
std::string CommandLineArgs::GetArg(std::size_t index) const
|
||||
{
|
||||
if(index<mArugments.size())
|
||||
{
|
||||
return mArugments[index];
|
||||
}
|
||||
return "";
|
||||
}
|
19
src/core/CommandLineArgs.h
Normal file
19
src/core/CommandLineArgs.h
Normal file
|
@ -0,0 +1,19 @@
|
|||
#pragma once
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
|
||||
class CommandLineArgs
|
||||
{
|
||||
std::vector<std::string> mArugments;
|
||||
|
||||
public:
|
||||
|
||||
CommandLineArgs();
|
||||
|
||||
void Process(int argc, char *argv[]);
|
||||
|
||||
std::size_t GetNumberOfArgs() const;
|
||||
|
||||
std::string GetArg(std::size_t index) const;
|
||||
};
|
11
src/core/Event.cpp
Normal file
11
src/core/Event.cpp
Normal file
|
@ -0,0 +1,11 @@
|
|||
#include "Event.h"
|
||||
|
||||
Event::Event()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
Event::~Event()
|
||||
{
|
||||
|
||||
}
|
8
src/core/Event.h
Normal file
8
src/core/Event.h
Normal file
|
@ -0,0 +1,8 @@
|
|||
class Event
|
||||
{
|
||||
public:
|
||||
|
||||
Event();
|
||||
|
||||
~Event();
|
||||
};
|
14
src/core/StringUtils.cpp
Normal file
14
src/core/StringUtils.cpp
Normal file
|
@ -0,0 +1,14 @@
|
|||
#include "StringUtils.h"
|
||||
#include <locale>
|
||||
|
||||
bool StringUtils::IsAlphaNumeric(char c)
|
||||
{
|
||||
std::locale loc;
|
||||
return std::isalnum(c, loc);
|
||||
}
|
||||
|
||||
bool StringUtils::IsSpace(char c)
|
||||
{
|
||||
std::locale loc;
|
||||
return std::isspace(c, loc);
|
||||
}
|
19
src/core/StringUtils.h
Normal file
19
src/core/StringUtils.h
Normal file
|
@ -0,0 +1,19 @@
|
|||
#pragma once
|
||||
|
||||
#include <string>
|
||||
|
||||
class StringUtils
|
||||
{
|
||||
public:
|
||||
static constexpr char LEFT_BRACKET = '<';
|
||||
static constexpr char RIGHT_BRACKET = '>';
|
||||
static constexpr char FORWARD_SLASH = '/';
|
||||
static constexpr char BACK_SLASH = '\\';
|
||||
static constexpr char QUESTION_MARK = '?';
|
||||
static constexpr char EQUALS = '=';
|
||||
static constexpr char DOUBLE_QUOTE = '"';
|
||||
static constexpr char SINGLE_QUOTE = '\'';
|
||||
|
||||
static bool IsAlphaNumeric(char c);
|
||||
static bool IsSpace(char c);
|
||||
};
|
38
src/core/http/HttpResponse.cpp
Normal file
38
src/core/http/HttpResponse.cpp
Normal file
|
@ -0,0 +1,38 @@
|
|||
#include "HttpResponse.h"
|
||||
|
||||
HttpResponse::HttpResponse()
|
||||
:mHttpVersion("1.1"),
|
||||
mResponseCode("200 OK"),
|
||||
mContentType("text/plain"),
|
||||
mBody()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
HttpResponse::~HttpResponse()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void HttpResponse::SetBody(const std::string& body)
|
||||
{
|
||||
mBody = body;
|
||||
}
|
||||
|
||||
unsigned HttpResponse::GetBodyLength()
|
||||
{
|
||||
return mBody.length();
|
||||
}
|
||||
|
||||
std::string HttpResponse::GetHeaderString()
|
||||
{
|
||||
std::string header = "HTTP/" + mHttpVersion + " " + mResponseCode + "\n";
|
||||
header += "Content-Type: " + mContentType + "\n";
|
||||
header += "Content-Length: " + std::to_string(GetBodyLength()) + "\n";
|
||||
return header;
|
||||
}
|
||||
|
||||
std::string HttpResponse::ToString()
|
||||
{
|
||||
return GetHeaderString() + "\n\n" + mBody;
|
||||
}
|
26
src/core/http/HttpResponse.h
Normal file
26
src/core/http/HttpResponse.h
Normal file
|
@ -0,0 +1,26 @@
|
|||
#pragma once
|
||||
|
||||
#include <string>
|
||||
|
||||
class HttpResponse
|
||||
{
|
||||
|
||||
std::string mHttpVersion;
|
||||
std::string mResponseCode;
|
||||
std::string mContentType;
|
||||
std::string mBody;
|
||||
|
||||
public:
|
||||
|
||||
HttpResponse();
|
||||
|
||||
~HttpResponse();
|
||||
|
||||
void SetBody(const std::string& body);
|
||||
|
||||
unsigned GetBodyLength();
|
||||
|
||||
std::string GetHeaderString();
|
||||
|
||||
std::string ToString();
|
||||
};
|
44
src/core/loggers/FileLogger.cpp
Normal file
44
src/core/loggers/FileLogger.cpp
Normal file
|
@ -0,0 +1,44 @@
|
|||
#include "FileLogger.h"
|
||||
|
||||
FileLogger::FileLogger()
|
||||
:mWorkDirectory(),
|
||||
mFileName("MT_Log.txt"),
|
||||
mFileStream()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
FileLogger::~FileLogger()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void FileLogger::SetWorkDirectory(const std::string& workDir)
|
||||
{
|
||||
mWorkDirectory = workDir;
|
||||
}
|
||||
|
||||
void FileLogger::SetFileName(const std::string& fileName)
|
||||
{
|
||||
mFileName = fileName;
|
||||
}
|
||||
|
||||
void FileLogger::Open()
|
||||
{
|
||||
mFileStream.open(mWorkDirectory + "/" + mFileName);
|
||||
}
|
||||
|
||||
void FileLogger::Close()
|
||||
{
|
||||
mFileStream.close();
|
||||
}
|
||||
|
||||
void FileLogger::LogLine(const std::string& line)
|
||||
{
|
||||
mFileStream << line << std::endl;
|
||||
}
|
||||
|
||||
std::shared_ptr<FileLogger> FileLogger::Create()
|
||||
{
|
||||
return std::make_shared<FileLogger>();
|
||||
}
|
35
src/core/loggers/FileLogger.h
Normal file
35
src/core/loggers/FileLogger.h
Normal file
|
@ -0,0 +1,35 @@
|
|||
#pragma once
|
||||
|
||||
#include <memory>
|
||||
#include <string>
|
||||
#include <fstream>
|
||||
|
||||
class FileLogger
|
||||
{
|
||||
std::string mWorkDirectory;
|
||||
|
||||
std::string mFileName;
|
||||
|
||||
std::ofstream mFileStream;
|
||||
|
||||
public:
|
||||
|
||||
FileLogger();
|
||||
|
||||
~FileLogger();
|
||||
|
||||
void SetWorkDirectory(const std::string& workDir);
|
||||
|
||||
void SetFileName(const std::string& fileName);
|
||||
|
||||
void Open();
|
||||
|
||||
void Close();
|
||||
|
||||
void LogLine(const std::string& line);
|
||||
|
||||
static std::shared_ptr<FileLogger> Create();
|
||||
|
||||
};
|
||||
|
||||
using FileLoggerPtr = std::shared_ptr<FileLogger>;
|
13
src/database/CMakeLists.txt
Normal file
13
src/database/CMakeLists.txt
Normal file
|
@ -0,0 +1,13 @@
|
|||
list(APPEND database_LIB_INCLUDES
|
||||
Database.cpp
|
||||
DatabaseManager.cpp
|
||||
database_interfaces/SqliteInterface.cpp)
|
||||
|
||||
add_library(database SHARED ${database_LIB_INCLUDES})
|
||||
|
||||
target_include_directories(database PUBLIC
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/database_interfaces"
|
||||
)
|
||||
|
||||
target_link_libraries(database PUBLIC sqlite3)
|
27
src/database/Database.cpp
Normal file
27
src/database/Database.cpp
Normal file
|
@ -0,0 +1,27 @@
|
|||
#include "Database.h"
|
||||
|
||||
Database::Database()
|
||||
: mPath()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
Database::~Database()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
std::shared_ptr<Database> Database::Create()
|
||||
{
|
||||
return std::make_shared<Database>();
|
||||
}
|
||||
|
||||
void Database::SetPath(const std::string& path)
|
||||
{
|
||||
mPath = path;
|
||||
}
|
||||
|
||||
std::string Database::GetPath()
|
||||
{
|
||||
return mPath;
|
||||
}
|
24
src/database/Database.h
Normal file
24
src/database/Database.h
Normal file
|
@ -0,0 +1,24 @@
|
|||
#pragma once
|
||||
|
||||
#include <memory>
|
||||
#include <string>
|
||||
|
||||
class Database
|
||||
{
|
||||
|
||||
std::string mPath;
|
||||
|
||||
public:
|
||||
|
||||
Database();
|
||||
|
||||
~Database();
|
||||
|
||||
static std::shared_ptr<Database> Create();
|
||||
|
||||
void SetPath(const std::string& path);
|
||||
|
||||
std::string GetPath();
|
||||
};
|
||||
|
||||
using DatabasePtr = std::shared_ptr<Database>;
|
36
src/database/DatabaseManager.cpp
Normal file
36
src/database/DatabaseManager.cpp
Normal file
|
@ -0,0 +1,36 @@
|
|||
#include "DatabaseManager.h"
|
||||
|
||||
DatabaseManager::DatabaseManager()
|
||||
: mDatabase(),
|
||||
mDatabaseInterface()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
DatabaseManager::~DatabaseManager()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
std::shared_ptr<DatabaseManager> DatabaseManager::Create()
|
||||
{
|
||||
return std::make_shared<DatabaseManager>();
|
||||
}
|
||||
|
||||
|
||||
void DatabaseManager::CreateDatabase(const std::string& path)
|
||||
{
|
||||
mDatabase = Database::Create();
|
||||
mDatabase->SetPath(path);
|
||||
|
||||
mDatabaseInterface = SqliteInterface::Create();
|
||||
mDatabaseInterface->Open(mDatabase);
|
||||
}
|
||||
|
||||
void DatabaseManager::OnShutDown()
|
||||
{
|
||||
if(mDatabaseInterface)
|
||||
{
|
||||
mDatabaseInterface->Close();
|
||||
}
|
||||
}
|
27
src/database/DatabaseManager.h
Normal file
27
src/database/DatabaseManager.h
Normal file
|
@ -0,0 +1,27 @@
|
|||
#pragma once
|
||||
|
||||
#include <memory>
|
||||
|
||||
#include "SqliteInterface.h"
|
||||
#include "Database.h"
|
||||
|
||||
class DatabaseManager
|
||||
{
|
||||
|
||||
DatabasePtr mDatabase;
|
||||
SqliteInterfacePtr mDatabaseInterface;
|
||||
|
||||
public:
|
||||
|
||||
DatabaseManager();
|
||||
|
||||
~DatabaseManager();
|
||||
|
||||
static std::shared_ptr<DatabaseManager> Create();
|
||||
|
||||
void CreateDatabase(const std::string& path);
|
||||
|
||||
void OnShutDown();
|
||||
};
|
||||
|
||||
using DatabaseManagerPtr = std::shared_ptr<DatabaseManager>;
|
56
src/database/database_interfaces/SqliteInterface.cpp
Normal file
56
src/database/database_interfaces/SqliteInterface.cpp
Normal file
|
@ -0,0 +1,56 @@
|
|||
#include "SqliteInterface.h"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
SqliteInterface::SqliteInterface()
|
||||
: mSqliteDb(nullptr)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
SqliteInterface::~SqliteInterface()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
std::shared_ptr<SqliteInterface> SqliteInterface::Create()
|
||||
{
|
||||
return std::make_shared<SqliteInterface>();
|
||||
}
|
||||
|
||||
void SqliteInterface::Open(DatabasePtr db)
|
||||
{
|
||||
int rc = sqlite3_open(db->GetPath().c_str(), &mSqliteDb);
|
||||
if( rc )
|
||||
{
|
||||
std::cout << "Can't open database: %s\n" << sqlite3_errmsg(mSqliteDb) << std::endl;
|
||||
sqlite3_close(mSqliteDb);
|
||||
}
|
||||
}
|
||||
|
||||
static int callback(void *NotUsed, int argc, char **argv, char **azColName)
|
||||
{
|
||||
for(int i=0; i<argc; i++)
|
||||
{
|
||||
//std::cout << "%s = %s\n" << azColName[i] << argv[i] ? argv[i] : "NULL" << std::endl;
|
||||
|
||||
std::cout << "NULL" << std::endl;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void SqliteInterface::Run(const std::string& statement)
|
||||
{
|
||||
char *zErrMsg = 0;
|
||||
int rc = sqlite3_exec(mSqliteDb, statement.c_str(), callback, 0, &zErrMsg);
|
||||
if( rc!=SQLITE_OK )
|
||||
{
|
||||
std::cout << "SQL error: %s\n" << zErrMsg << std::endl;
|
||||
sqlite3_free(zErrMsg);
|
||||
}
|
||||
}
|
||||
|
||||
void SqliteInterface::Close()
|
||||
{
|
||||
sqlite3_close(mSqliteDb);
|
||||
}
|
26
src/database/database_interfaces/SqliteInterface.h
Normal file
26
src/database/database_interfaces/SqliteInterface.h
Normal file
|
@ -0,0 +1,26 @@
|
|||
#pragma once
|
||||
#include <memory>
|
||||
#include <sqlite3.h>
|
||||
|
||||
#include "Database.h"
|
||||
|
||||
class SqliteInterface
|
||||
{
|
||||
sqlite3* mSqliteDb;
|
||||
|
||||
public:
|
||||
|
||||
SqliteInterface();
|
||||
|
||||
~SqliteInterface();
|
||||
|
||||
static std::shared_ptr<SqliteInterface> Create();
|
||||
|
||||
void Open(DatabasePtr db);
|
||||
|
||||
void Close();
|
||||
|
||||
void Run(const std::string& statement);
|
||||
};
|
||||
|
||||
using SqliteInterfacePtr = std::shared_ptr<SqliteInterface>;
|
7
src/geometry/CMakeLists.txt
Normal file
7
src/geometry/CMakeLists.txt
Normal file
|
@ -0,0 +1,7 @@
|
|||
list(APPEND geometry_LIB_INCLUDES
|
||||
DiscretePoint.cpp
|
||||
Point.cpp)
|
||||
|
||||
# add the library
|
||||
add_library(geometry SHARED ${geometry_LIB_INCLUDES})
|
||||
|
28
src/geometry/DiscretePoint.cpp
Normal file
28
src/geometry/DiscretePoint.cpp
Normal file
|
@ -0,0 +1,28 @@
|
|||
#include "DiscretePoint.h"
|
||||
|
||||
|
||||
DiscretePoint::DiscretePoint(unsigned x, unsigned y)
|
||||
: mX(x),
|
||||
mY(y)
|
||||
{
|
||||
}
|
||||
|
||||
DiscretePoint::~DiscretePoint()
|
||||
{
|
||||
};
|
||||
|
||||
|
||||
std::shared_ptr<DiscretePoint> DiscretePoint::Create(unsigned x, unsigned y)
|
||||
{
|
||||
return std::make_shared<DiscretePoint>(x, y);
|
||||
}
|
||||
|
||||
unsigned DiscretePoint::GetX() const
|
||||
{
|
||||
return mX;
|
||||
}
|
||||
|
||||
unsigned DiscretePoint::GetY() const
|
||||
{
|
||||
return mY;
|
||||
}
|
25
src/geometry/DiscretePoint.h
Normal file
25
src/geometry/DiscretePoint.h
Normal file
|
@ -0,0 +1,25 @@
|
|||
#pragma once
|
||||
|
||||
#include <memory>
|
||||
|
||||
class DiscretePoint
|
||||
{
|
||||
unsigned mX;
|
||||
unsigned mY;
|
||||
|
||||
public:
|
||||
|
||||
DiscretePoint(unsigned x, unsigned y);
|
||||
|
||||
~DiscretePoint();
|
||||
|
||||
std::shared_ptr<DiscretePoint> Create(unsigned x, unsigned y);
|
||||
|
||||
unsigned GetX() const;
|
||||
|
||||
unsigned GetY() const;
|
||||
};
|
||||
|
||||
using Pixel = DiscretePoint;
|
||||
using DiscretePointPtr = std::shared_ptr<DiscretePoint>;
|
||||
using PixelPtr = DiscretePointPtr;
|
18
src/geometry/Point.cpp
Normal file
18
src/geometry/Point.cpp
Normal file
|
@ -0,0 +1,18 @@
|
|||
#include "Point.h"
|
||||
|
||||
|
||||
Point::Point(double x, double y)
|
||||
: mX(x),
|
||||
mY(y)
|
||||
{
|
||||
}
|
||||
|
||||
Point::~Point()
|
||||
{
|
||||
};
|
||||
|
||||
|
||||
std::shared_ptr<Point> Point::Create(double x, double y)
|
||||
{
|
||||
return std::make_shared<Point>(x, y);
|
||||
}
|
19
src/geometry/Point.h
Normal file
19
src/geometry/Point.h
Normal file
|
@ -0,0 +1,19 @@
|
|||
#pragma once
|
||||
|
||||
#include <memory>
|
||||
|
||||
class Point
|
||||
{
|
||||
double mX;
|
||||
double mY;
|
||||
|
||||
public:
|
||||
|
||||
Point(double x, double y);
|
||||
|
||||
~Point();
|
||||
|
||||
std::shared_ptr<Point> Create(double x, double y);
|
||||
};
|
||||
|
||||
using PointPtr = std::shared_ptr<Point>;
|
0
src/geometry/Rectangle.cpp
Normal file
0
src/geometry/Rectangle.cpp
Normal file
7
src/geometry/Rectangle.h
Normal file
7
src/geometry/Rectangle.h
Normal file
|
@ -0,0 +1,7 @@
|
|||
#pragma once
|
||||
|
||||
|
||||
class Rectangle
|
||||
{
|
||||
|
||||
};
|
5
src/graphics/CMakeLists.txt
Normal file
5
src/graphics/CMakeLists.txt
Normal file
|
@ -0,0 +1,5 @@
|
|||
list(APPEND graphics_LIB_INCLUDES OpenGlInterface)
|
||||
|
||||
add_library(graphics SHARED ${graphics_LIB_INCLUDES})
|
||||
|
||||
target_link_libraries(graphics PUBLIC GL)
|
20
src/graphics/OpenGlInterface.cpp
Normal file
20
src/graphics/OpenGlInterface.cpp
Normal file
|
@ -0,0 +1,20 @@
|
|||
#include "OpenGlInterface.h"
|
||||
|
||||
#include <GL/gl.h>
|
||||
|
||||
void OpenGlInterface::draw()
|
||||
{
|
||||
glClearColor(0.4, 0.4, 0.4, 0.4);
|
||||
glClear(GL_COLOR_BUFFER_BIT);
|
||||
|
||||
glColor3f(1.0, 1.0, 1.0);
|
||||
glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);
|
||||
|
||||
glBegin(GL_TRIANGLES);
|
||||
glVertex3f(-0.7, 0.7, 0);
|
||||
glVertex3f(0.7, 0.7, 0);
|
||||
glVertex3f(0, -1, 0);
|
||||
glEnd();
|
||||
|
||||
glFlush();
|
||||
}
|
10
src/graphics/OpenGlInterface.h
Normal file
10
src/graphics/OpenGlInterface.h
Normal file
|
@ -0,0 +1,10 @@
|
|||
#pragma once
|
||||
|
||||
class OpenGlInterface
|
||||
{
|
||||
public:
|
||||
|
||||
static void draw();
|
||||
};
|
||||
|
||||
|
14
src/network/CMakeLists.txt
Normal file
14
src/network/CMakeLists.txt
Normal file
|
@ -0,0 +1,14 @@
|
|||
list(APPEND network_LIB_INCLUDES
|
||||
NetworkManager.cpp
|
||||
sockets/Socket.cpp
|
||||
sockets/UnixSocketInterface.cpp)
|
||||
|
||||
add_library(network SHARED ${network_LIB_INCLUDES})
|
||||
|
||||
target_include_directories(network PUBLIC
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/sockets"
|
||||
"${PROJECT_SOURCE_DIR}/src/core/http"
|
||||
)
|
||||
|
||||
target_link_libraries(network PUBLIC core)
|
36
src/network/NetworkManager.cpp
Normal file
36
src/network/NetworkManager.cpp
Normal file
|
@ -0,0 +1,36 @@
|
|||
#include "NetworkManager.h"
|
||||
|
||||
NetworkManager::NetworkManager()
|
||||
: mActiveSockets(),
|
||||
mSocketInterface()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
NetworkManager::~NetworkManager()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
std::shared_ptr<NetworkManager> NetworkManager::Create()
|
||||
{
|
||||
return std::make_shared<NetworkManager>();
|
||||
}
|
||||
|
||||
void NetworkManager::Initialize()
|
||||
{
|
||||
mSocketInterface = UnixSocketInterface::Create();
|
||||
}
|
||||
|
||||
void NetworkManager::RunHttpServer()
|
||||
{
|
||||
auto socket = Socket::Create();
|
||||
mSocketInterface->CreateSocket(socket);
|
||||
mSocketInterface->Listen(socket);
|
||||
mSocketInterface->Run(socket);
|
||||
}
|
||||
|
||||
void NetworkManager::ShutDown()
|
||||
{
|
||||
|
||||
}
|
33
src/network/NetworkManager.h
Normal file
33
src/network/NetworkManager.h
Normal file
|
@ -0,0 +1,33 @@
|
|||
#pragma once
|
||||
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
|
||||
#include "Socket.h"
|
||||
#include "UnixSocketInterface.h"
|
||||
|
||||
class NetworkManager
|
||||
{
|
||||
std::vector<SocketPtr> mActiveSockets;
|
||||
UnixSocketInterfacePtr mSocketInterface;
|
||||
|
||||
public:
|
||||
|
||||
NetworkManager();
|
||||
|
||||
~NetworkManager();
|
||||
|
||||
static std::shared_ptr<NetworkManager> Create();
|
||||
|
||||
void Initialize();
|
||||
|
||||
void OpenSocket(SocketPtr socket);
|
||||
|
||||
void CloseSocket(SocketPtr socket);
|
||||
|
||||
void RunHttpServer();
|
||||
|
||||
void ShutDown();
|
||||
};
|
||||
|
||||
using NetworkManagerPtr = std::shared_ptr<NetworkManager>;
|
38
src/network/sockets/Socket.cpp
Normal file
38
src/network/sockets/Socket.cpp
Normal file
|
@ -0,0 +1,38 @@
|
|||
#include "Socket.h"
|
||||
|
||||
Socket::Socket()
|
||||
: mPort(8888),
|
||||
mMessage()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
Socket::~Socket()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
std::shared_ptr<Socket> Socket::Create()
|
||||
{
|
||||
return std::make_shared<Socket>();
|
||||
}
|
||||
|
||||
std::string Socket::GetMessage()
|
||||
{
|
||||
return mMessage;
|
||||
}
|
||||
|
||||
void Socket::SetMessage(const std::string& message)
|
||||
{
|
||||
mMessage = message;
|
||||
}
|
||||
|
||||
void Socket::SetPort(unsigned port)
|
||||
{
|
||||
mPort = port;
|
||||
}
|
||||
|
||||
unsigned Socket::GetPort()
|
||||
{
|
||||
return mPort;
|
||||
}
|
28
src/network/sockets/Socket.h
Normal file
28
src/network/sockets/Socket.h
Normal file
|
@ -0,0 +1,28 @@
|
|||
#pragma once
|
||||
|
||||
#include <memory>
|
||||
#include <string>
|
||||
|
||||
class Socket
|
||||
{
|
||||
unsigned mPort;
|
||||
std::string mMessage;
|
||||
|
||||
public:
|
||||
|
||||
Socket();
|
||||
|
||||
~Socket();
|
||||
|
||||
static std::shared_ptr<Socket> Create();
|
||||
|
||||
void SetPort(unsigned port);
|
||||
|
||||
unsigned GetPort();
|
||||
|
||||
std::string GetMessage();
|
||||
|
||||
void SetMessage(const std::string& message);
|
||||
};
|
||||
|
||||
using SocketPtr = std::shared_ptr<Socket>;
|
100
src/network/sockets/UnixSocketInterface.cpp
Normal file
100
src/network/sockets/UnixSocketInterface.cpp
Normal file
|
@ -0,0 +1,100 @@
|
|||
#include "UnixSocketInterface.h"
|
||||
|
||||
#include <iostream>
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <netinet/in.h>
|
||||
#include "HttpResponse.h"
|
||||
|
||||
UnixSocketInterface::UnixSocketInterface()
|
||||
: mOpeningHandles(),
|
||||
mBufferSize(1024)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
UnixSocketInterface::~UnixSocketInterface()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
std::shared_ptr<UnixSocketInterface> UnixSocketInterface::Create()
|
||||
{
|
||||
return std::make_shared<UnixSocketInterface>();
|
||||
}
|
||||
|
||||
void UnixSocketInterface::CreateSocket(SocketPtr socketPtr)
|
||||
{
|
||||
mOpeningHandles[socketPtr] = socket(AF_INET, SOCK_STREAM, 0);
|
||||
}
|
||||
|
||||
void UnixSocketInterface::Listen(SocketPtr socket)
|
||||
{
|
||||
if(mOpeningHandles[socket] < 0)
|
||||
{
|
||||
std::cerr << "Error opening socket" << std::endl;
|
||||
return;
|
||||
}
|
||||
|
||||
int port = static_cast<int>(socket->GetPort());
|
||||
struct sockaddr_in serv_addr;
|
||||
memset(&serv_addr, 0, sizeof(serv_addr));
|
||||
serv_addr.sin_family = AF_INET;
|
||||
serv_addr.sin_addr.s_addr = INADDR_ANY;
|
||||
serv_addr.sin_port = htons(port);
|
||||
|
||||
int result = bind(mOpeningHandles[socket], (struct sockaddr *)&serv_addr, sizeof(serv_addr));
|
||||
if(result< 0)
|
||||
{
|
||||
std::cerr << "Error binding socket" << std::endl;
|
||||
return;
|
||||
}
|
||||
|
||||
listen(mOpeningHandles[socket], 5);
|
||||
}
|
||||
|
||||
void UnixSocketInterface::Run(SocketPtr socket)
|
||||
{
|
||||
if(mOpeningHandles[socket] < 0)
|
||||
{
|
||||
std::cerr << "Error opening socket" << std::endl;
|
||||
return;
|
||||
}
|
||||
|
||||
struct sockaddr_in cli_addr;
|
||||
socklen_t clilen = sizeof(cli_addr);
|
||||
while(true)
|
||||
{
|
||||
SocketHandle new_socket_handle = accept(mOpeningHandles[socket],
|
||||
(struct sockaddr *) &cli_addr, &clilen);
|
||||
if (new_socket_handle < 0)
|
||||
{
|
||||
std::cerr << "Error on accept" << std::endl;
|
||||
return;
|
||||
}
|
||||
|
||||
char buffer[mBufferSize] = {0};
|
||||
int n = read(new_socket_handle, buffer, mBufferSize);
|
||||
if (n < 0)
|
||||
{
|
||||
std::cerr << "Error on read" << std::endl;
|
||||
return;
|
||||
}
|
||||
socket->SetMessage(buffer);
|
||||
std::cout << "Here is the message: " << buffer << std::endl;
|
||||
|
||||
HttpResponse response;
|
||||
response.SetBody("Hello world!");
|
||||
|
||||
std::string response_message = response.ToString();
|
||||
n = write(new_socket_handle, response_message.c_str(), response_message.length());
|
||||
if (n < 0)
|
||||
{
|
||||
std::cerr << "Error on write" << std::endl;
|
||||
return;
|
||||
}
|
||||
close(new_socket_handle);
|
||||
}
|
||||
}
|
30
src/network/sockets/UnixSocketInterface.h
Normal file
30
src/network/sockets/UnixSocketInterface.h
Normal file
|
@ -0,0 +1,30 @@
|
|||
#pragma once
|
||||
|
||||
#include <memory>
|
||||
#include <map>
|
||||
#include <cstddef>
|
||||
|
||||
#include "Socket.h"
|
||||
|
||||
class UnixSocketInterface
|
||||
{
|
||||
using SocketHandle = int;
|
||||
std::map<SocketPtr, SocketHandle> mOpeningHandles;
|
||||
std::size_t mBufferSize;
|
||||
|
||||
public:
|
||||
|
||||
UnixSocketInterface();
|
||||
|
||||
~UnixSocketInterface();
|
||||
|
||||
static std::shared_ptr<UnixSocketInterface> Create();
|
||||
|
||||
void CreateSocket(SocketPtr socket);
|
||||
|
||||
void Listen(SocketPtr socket);
|
||||
|
||||
void Run(SocketPtr socket);
|
||||
};
|
||||
|
||||
using UnixSocketInterfacePtr = std::shared_ptr<UnixSocketInterface>;
|
29
src/ui_elements/CMakeLists.txt
Normal file
29
src/ui_elements/CMakeLists.txt
Normal file
|
@ -0,0 +1,29 @@
|
|||
list(APPEND ui_elements_LIB_INCLUDES
|
||||
desktop_elements/Keyboard.cpp
|
||||
desktop_elements/Screen.cpp
|
||||
desktop_elements/Window.cpp
|
||||
ui_events/KeyboardEvent.cpp
|
||||
ui_events/MouseEvent.cpp
|
||||
ui_events/UiEvent.cpp
|
||||
ui_events/PaintEvent.cpp
|
||||
widgets/Widget.cpp
|
||||
widgets/Button.cpp
|
||||
widgets/Label.cpp
|
||||
widgets/HorizontalSpacer.cpp
|
||||
widgets/elements/GeometryElement.cpp
|
||||
widgets/elements/RectangleElement.cpp
|
||||
widgets/elements/TextElement.cpp
|
||||
widgets/elements/VisualLayer.cpp)
|
||||
|
||||
add_library(ui_elements SHARED ${ui_elements_LIB_INCLUDES})
|
||||
|
||||
target_include_directories(ui_elements PUBLIC
|
||||
"${PROJECT_SOURCE_DIR}/src/core/"
|
||||
"${PROJECT_SOURCE_DIR}/src/geometry/"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/widgets"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/widgets/elements"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/ui_events"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/desktop_elements"
|
||||
)
|
||||
target_link_libraries(ui_elements PUBLIC core geometry)
|
13
src/ui_elements/desktop_elements/Keyboard.cpp
Normal file
13
src/ui_elements/desktop_elements/Keyboard.cpp
Normal file
|
@ -0,0 +1,13 @@
|
|||
#include "Keyboard.h"
|
||||
|
||||
Keyboard::Keyboard()
|
||||
:mKeyMap()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
std::shared_ptr<Keyboard> Keyboard::Create()
|
||||
{
|
||||
return std::make_shared<Keyboard>();
|
||||
}
|
||||
|
26
src/ui_elements/desktop_elements/Keyboard.h
Normal file
26
src/ui_elements/desktop_elements/Keyboard.h
Normal file
|
@ -0,0 +1,26 @@
|
|||
#pragma once
|
||||
#include <memory>
|
||||
#include <map>
|
||||
#include <string>
|
||||
|
||||
class Keyboard
|
||||
{
|
||||
public:
|
||||
using KeyCode = unsigned;
|
||||
|
||||
protected:
|
||||
std::map<KeyCode, std::string> mKeyMap;
|
||||
|
||||
public:
|
||||
Keyboard();
|
||||
virtual ~Keyboard() = default;
|
||||
|
||||
static std::shared_ptr<Keyboard> Create();
|
||||
|
||||
virtual std::string GetKeyString(KeyCode code)
|
||||
{
|
||||
return "";
|
||||
}
|
||||
};
|
||||
|
||||
using KeyboardPtr = std::shared_ptr<Keyboard>;
|
18
src/ui_elements/desktop_elements/Screen.cpp
Normal file
18
src/ui_elements/desktop_elements/Screen.cpp
Normal file
|
@ -0,0 +1,18 @@
|
|||
#include "Screen.h"
|
||||
|
||||
namespace mt{
|
||||
Screen::Screen()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
Screen::~Screen()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
std::shared_ptr<Screen> Screen::Create()
|
||||
{
|
||||
return std::make_shared<Screen>();
|
||||
}
|
||||
}
|
17
src/ui_elements/desktop_elements/Screen.h
Normal file
17
src/ui_elements/desktop_elements/Screen.h
Normal file
|
@ -0,0 +1,17 @@
|
|||
#pragma once
|
||||
|
||||
#include <memory>
|
||||
namespace mt{
|
||||
class Screen
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
Screen();
|
||||
|
||||
~Screen();
|
||||
|
||||
static std::shared_ptr<Screen> Create();
|
||||
};
|
||||
}
|
||||
using ScreenPtr = std::shared_ptr<mt::Screen>;
|
67
src/ui_elements/desktop_elements/Window.cpp
Normal file
67
src/ui_elements/desktop_elements/Window.cpp
Normal file
|
@ -0,0 +1,67 @@
|
|||
#include "Window.h"
|
||||
|
||||
namespace mt{
|
||||
Window::Window()
|
||||
:mWidth(400),
|
||||
mHeight(300),
|
||||
mWidget()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
Window::~Window()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
std::vector<VisualLayerPtr> Window::GetLayers()
|
||||
{
|
||||
return mLayers;
|
||||
}
|
||||
|
||||
void Window::OnMouseEvent(MouseEventPtr event)
|
||||
{
|
||||
mWidget->OnMouseEvent(event);
|
||||
}
|
||||
|
||||
void Window::OnPaint(PaintEventPtr event)
|
||||
{
|
||||
mLayers.clear();
|
||||
mWidget->SetSize(mWidth, mHeight);
|
||||
mWidget->OnPaintEvent(event);
|
||||
|
||||
auto layers = mWidget->GetLayers();
|
||||
mLayers.insert(mLayers.end(), layers.begin(), layers.end());
|
||||
}
|
||||
|
||||
std::shared_ptr<Window> Window::Create()
|
||||
{
|
||||
return std::make_shared<Window>();
|
||||
}
|
||||
|
||||
void Window::AddWidget(WidgetPtr widget)
|
||||
{
|
||||
mWidget = widget;
|
||||
}
|
||||
|
||||
WidgetPtr Window::GetWidget()
|
||||
{
|
||||
return mWidget;
|
||||
}
|
||||
|
||||
unsigned Window::GetWidth()
|
||||
{
|
||||
return mWidth;
|
||||
}
|
||||
|
||||
unsigned Window::GetHeight()
|
||||
{
|
||||
return mHeight;
|
||||
}
|
||||
|
||||
void Window::SetSize(unsigned width, unsigned height)
|
||||
{
|
||||
mWidth = width;
|
||||
mHeight = height;
|
||||
}
|
||||
}
|
50
src/ui_elements/desktop_elements/Window.h
Normal file
50
src/ui_elements/desktop_elements/Window.h
Normal file
|
@ -0,0 +1,50 @@
|
|||
#pragma once
|
||||
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
|
||||
#include "PaintEvent.h"
|
||||
#include "MouseEvent.h"
|
||||
#include "VisualLayer.h"
|
||||
#include "Widget.h"
|
||||
|
||||
namespace mt
|
||||
{
|
||||
|
||||
class Window
|
||||
{
|
||||
|
||||
private:
|
||||
|
||||
WidgetPtr mWidget;
|
||||
unsigned mWidth;
|
||||
unsigned mHeight;
|
||||
std::vector<VisualLayerPtr> mLayers;
|
||||
|
||||
public:
|
||||
|
||||
Window();
|
||||
|
||||
~Window();
|
||||
|
||||
static std::shared_ptr<Window> Create();
|
||||
|
||||
void AddWidget(WidgetPtr widget);
|
||||
|
||||
WidgetPtr GetWidget();
|
||||
|
||||
std::vector<VisualLayerPtr> GetLayers();
|
||||
|
||||
unsigned GetWidth();
|
||||
|
||||
unsigned GetHeight();
|
||||
|
||||
void SetSize(unsigned width, unsigned height);
|
||||
|
||||
void OnPaint(PaintEventPtr event);
|
||||
|
||||
void OnMouseEvent(MouseEventPtr event);
|
||||
};
|
||||
}
|
||||
|
||||
using WindowPtr = std::shared_ptr<mt::Window>;
|
0
src/ui_elements/style/Theme.cpp
Normal file
0
src/ui_elements/style/Theme.cpp
Normal file
1
src/ui_elements/style/Theme.h
Normal file
1
src/ui_elements/style/Theme.h
Normal file
|
@ -0,0 +1 @@
|
|||
|
39
src/ui_elements/ui_events/KeyboardEvent.cpp
Normal file
39
src/ui_elements/ui_events/KeyboardEvent.cpp
Normal file
|
@ -0,0 +1,39 @@
|
|||
#include "KeyboardEvent.h"
|
||||
|
||||
KeyboardEvent::KeyboardEvent()
|
||||
: UiEvent(),
|
||||
mAction(),
|
||||
mKeyString()
|
||||
{
|
||||
mType = UiEvent::Type::Keyboard;
|
||||
}
|
||||
|
||||
KeyboardEvent::~KeyboardEvent()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
std::shared_ptr<KeyboardEvent> KeyboardEvent::Create()
|
||||
{
|
||||
return std::make_shared<KeyboardEvent>();
|
||||
}
|
||||
|
||||
void KeyboardEvent::SetKeyString(const std::string& key)
|
||||
{
|
||||
mKeyString = key;
|
||||
}
|
||||
|
||||
std::string KeyboardEvent::GetKeyString()
|
||||
{
|
||||
return mKeyString;
|
||||
}
|
||||
|
||||
void KeyboardEvent::SetAction(Action action)
|
||||
{
|
||||
mAction = action;
|
||||
}
|
||||
|
||||
KeyboardEvent::Action KeyboardEvent::GetAction()
|
||||
{
|
||||
return mAction;
|
||||
}
|
39
src/ui_elements/ui_events/KeyboardEvent.h
Normal file
39
src/ui_elements/ui_events/KeyboardEvent.h
Normal file
|
@ -0,0 +1,39 @@
|
|||
#pragma once
|
||||
|
||||
#include <memory>
|
||||
#include <string>
|
||||
|
||||
#include "UiEvent.h"
|
||||
|
||||
class KeyboardEvent : public UiEvent
|
||||
{
|
||||
public:
|
||||
enum class Action
|
||||
{
|
||||
Pressed,
|
||||
Released
|
||||
};
|
||||
|
||||
private:
|
||||
|
||||
Action mAction;
|
||||
std::string mKeyString;
|
||||
|
||||
public:
|
||||
|
||||
KeyboardEvent();
|
||||
|
||||
~KeyboardEvent();
|
||||
|
||||
static std::shared_ptr<KeyboardEvent> Create();
|
||||
|
||||
void SetKeyString(const std::string& key);
|
||||
|
||||
std::string GetKeyString();
|
||||
|
||||
void SetAction(Action action);
|
||||
|
||||
Action GetAction();
|
||||
|
||||
};
|
||||
using KeyboardEventPtr = std::shared_ptr<KeyboardEvent>;
|
51
src/ui_elements/ui_events/MouseEvent.cpp
Normal file
51
src/ui_elements/ui_events/MouseEvent.cpp
Normal file
|
@ -0,0 +1,51 @@
|
|||
#include "MouseEvent.h"
|
||||
|
||||
MouseEvent::MouseEvent()
|
||||
: UiEvent(),
|
||||
mClientLocation(0, 0),
|
||||
mScreenLocation(0, 0),
|
||||
mAction()
|
||||
{
|
||||
mType = UiEvent::Type::Mouse;
|
||||
}
|
||||
|
||||
MouseEvent::~MouseEvent()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
std::shared_ptr<MouseEvent> MouseEvent::Create()
|
||||
{
|
||||
return std::make_shared<MouseEvent>();
|
||||
}
|
||||
|
||||
void MouseEvent::SetClientLocation(Pixel location)
|
||||
{
|
||||
mClientLocation = location;
|
||||
}
|
||||
|
||||
void MouseEvent::SetScreenLocation(Pixel location)
|
||||
{
|
||||
mScreenLocation = location;
|
||||
}
|
||||
|
||||
void MouseEvent::SetAction(MouseEvent::Action action)
|
||||
{
|
||||
mAction = action;
|
||||
}
|
||||
|
||||
Pixel MouseEvent::GetClientLocation()
|
||||
{
|
||||
return mClientLocation;
|
||||
}
|
||||
|
||||
Pixel MouseEvent::GetScreenLocation()
|
||||
{
|
||||
return mScreenLocation;
|
||||
}
|
||||
|
||||
MouseEvent::Action MouseEvent::GetAction()
|
||||
{
|
||||
return mAction;
|
||||
}
|
||||
|
42
src/ui_elements/ui_events/MouseEvent.h
Normal file
42
src/ui_elements/ui_events/MouseEvent.h
Normal file
|
@ -0,0 +1,42 @@
|
|||
#pragma once
|
||||
|
||||
#include <memory>
|
||||
|
||||
#include "DiscretePoint.h"
|
||||
#include "UiEvent.h"
|
||||
|
||||
class MouseEvent : public UiEvent
|
||||
{
|
||||
public:
|
||||
enum class Action
|
||||
{
|
||||
Pressed,
|
||||
Released
|
||||
};
|
||||
|
||||
private:
|
||||
Pixel mClientLocation;
|
||||
Pixel mScreenLocation;
|
||||
Action mAction;
|
||||
|
||||
public:
|
||||
|
||||
MouseEvent();
|
||||
|
||||
~MouseEvent();
|
||||
|
||||
static std::shared_ptr<MouseEvent> Create();
|
||||
|
||||
void SetClientLocation(Pixel location);
|
||||
|
||||
void SetScreenLocation(Pixel location);
|
||||
|
||||
void SetAction(Action action);
|
||||
|
||||
Pixel GetClientLocation();
|
||||
|
||||
Pixel GetScreenLocation();
|
||||
|
||||
Action GetAction();
|
||||
};
|
||||
using MouseEventPtr = std::shared_ptr<MouseEvent>;
|
18
src/ui_elements/ui_events/PaintEvent.cpp
Normal file
18
src/ui_elements/ui_events/PaintEvent.cpp
Normal file
|
@ -0,0 +1,18 @@
|
|||
#include "PaintEvent.h"
|
||||
|
||||
PaintEvent::PaintEvent()
|
||||
: UiEvent()
|
||||
{
|
||||
mType = UiEvent::Type::Paint;
|
||||
}
|
||||
|
||||
PaintEvent::~PaintEvent()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
std::shared_ptr<PaintEvent> PaintEvent::Create()
|
||||
{
|
||||
return std::make_shared<PaintEvent>();
|
||||
}
|
||||
|
17
src/ui_elements/ui_events/PaintEvent.h
Normal file
17
src/ui_elements/ui_events/PaintEvent.h
Normal file
|
@ -0,0 +1,17 @@
|
|||
#pragma once
|
||||
|
||||
#include <memory>
|
||||
|
||||
#include "UiEvent.h"
|
||||
|
||||
class PaintEvent : public UiEvent
|
||||
{
|
||||
public:
|
||||
|
||||
PaintEvent();
|
||||
|
||||
~PaintEvent();
|
||||
|
||||
static std::shared_ptr<PaintEvent> Create();
|
||||
};
|
||||
using PaintEventPtr = std::shared_ptr<PaintEvent>;
|
23
src/ui_elements/ui_events/UiEvent.cpp
Normal file
23
src/ui_elements/ui_events/UiEvent.cpp
Normal file
|
@ -0,0 +1,23 @@
|
|||
#include "UiEvent.h"
|
||||
|
||||
UiEvent::UiEvent()
|
||||
: mType(Type::Unknown)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
UiEvent::~UiEvent()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
std::shared_ptr<UiEvent> UiEvent::Create()
|
||||
{
|
||||
return std::make_shared<UiEvent>();
|
||||
}
|
||||
|
||||
UiEvent::Type UiEvent::GetType()
|
||||
{
|
||||
return mType;
|
||||
}
|
||||
|
29
src/ui_elements/ui_events/UiEvent.h
Normal file
29
src/ui_elements/ui_events/UiEvent.h
Normal file
|
@ -0,0 +1,29 @@
|
|||
#pragma once
|
||||
|
||||
#include <memory>
|
||||
|
||||
class UiEvent
|
||||
{
|
||||
public:
|
||||
|
||||
enum class Type{
|
||||
Unknown,
|
||||
Paint,
|
||||
Mouse,
|
||||
Keyboard
|
||||
};
|
||||
|
||||
protected:
|
||||
UiEvent::Type mType;
|
||||
|
||||
public:
|
||||
|
||||
UiEvent();
|
||||
|
||||
virtual ~UiEvent();
|
||||
|
||||
static std::shared_ptr<UiEvent> Create();
|
||||
|
||||
Type GetType();
|
||||
};
|
||||
using UiEventPtr = std::shared_ptr<UiEvent>;
|
44
src/ui_elements/widgets/Button.cpp
Normal file
44
src/ui_elements/widgets/Button.cpp
Normal file
|
@ -0,0 +1,44 @@
|
|||
#include "Button.h"
|
||||
#include <iostream>
|
||||
|
||||
Button::Button()
|
||||
: Widget(),
|
||||
mLabel()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
std::shared_ptr<Button> Button::Create()
|
||||
{
|
||||
return std::make_shared<Button>();
|
||||
}
|
||||
|
||||
void Button::SetLabel(const std::string& text)
|
||||
{
|
||||
mLabel = text;
|
||||
}
|
||||
|
||||
void Button::OnMyMouseEvent(MouseEventPtr event)
|
||||
{
|
||||
if(event->GetAction() == MouseEvent::Action::Pressed)
|
||||
{
|
||||
std::cout << "Clicked !!" << std::endl;
|
||||
SetBackgroundColor(Color::Create(0, 255, 0));
|
||||
}
|
||||
}
|
||||
|
||||
void Button::OnPaintEvent(PaintEventPtr event)
|
||||
{
|
||||
mLayers.clear();
|
||||
AddBackground(event);
|
||||
|
||||
if(!mLabel.empty())
|
||||
{
|
||||
auto middle = DiscretePoint(mLocation.GetX() + mWidth/2,
|
||||
mLocation.GetY() + mHeight/2);
|
||||
auto text = TextElement::Create(mLabel, middle);
|
||||
auto textLayer = VisualLayer::Create();
|
||||
textLayer->SetText(text);
|
||||
mLayers.push_back(textLayer);
|
||||
}
|
||||
}
|
24
src/ui_elements/widgets/Button.h
Normal file
24
src/ui_elements/widgets/Button.h
Normal file
|
@ -0,0 +1,24 @@
|
|||
#pragma once
|
||||
|
||||
#include "Widget.h"
|
||||
|
||||
class Button : public Widget
|
||||
{
|
||||
private:
|
||||
std::string mLabel;
|
||||
|
||||
public:
|
||||
Button();
|
||||
|
||||
void SetLabel(const std::string& text);
|
||||
|
||||
static std::shared_ptr<Button> Create();
|
||||
|
||||
void OnPaintEvent(PaintEventPtr event);
|
||||
|
||||
protected:
|
||||
|
||||
void OnMyMouseEvent(MouseEventPtr event);
|
||||
};
|
||||
|
||||
using ButtonPtr = std::shared_ptr<Button>;
|
33
src/ui_elements/widgets/HorizontalSpacer.cpp
Normal file
33
src/ui_elements/widgets/HorizontalSpacer.cpp
Normal file
|
@ -0,0 +1,33 @@
|
|||
#include "HorizontalSpacer.h"
|
||||
|
||||
HorizontalSpacer::HorizontalSpacer()
|
||||
: Widget()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
std::shared_ptr<HorizontalSpacer> HorizontalSpacer::Create()
|
||||
{
|
||||
return std::make_shared<HorizontalSpacer>();
|
||||
}
|
||||
|
||||
void HorizontalSpacer::AddChildLayers(PaintEventPtr event)
|
||||
{
|
||||
unsigned delta = mHeight / mChildren.size();
|
||||
for(std::size_t idx=0; idx<mChildren.size(); idx++)
|
||||
{
|
||||
auto child = mChildren[idx];
|
||||
child->SetSize(mWidth, delta);
|
||||
child->SetLocation(DiscretePoint(mLocation.GetX(), mLocation.GetY() + delta*idx));
|
||||
child->OnPaintEvent(event);
|
||||
auto layers = child->GetLayers();
|
||||
mLayers.insert(mLayers.end(), layers.begin(), layers.end());
|
||||
}
|
||||
}
|
||||
|
||||
void HorizontalSpacer::OnPaintEvent(PaintEventPtr event)
|
||||
{
|
||||
mLayers.clear();
|
||||
|
||||
AddChildLayers(event);
|
||||
}
|
18
src/ui_elements/widgets/HorizontalSpacer.h
Normal file
18
src/ui_elements/widgets/HorizontalSpacer.h
Normal file
|
@ -0,0 +1,18 @@
|
|||
#pragma once
|
||||
|
||||
#include "Widget.h"
|
||||
|
||||
class HorizontalSpacer : public Widget
|
||||
{
|
||||
|
||||
public:
|
||||
HorizontalSpacer();
|
||||
|
||||
static std::shared_ptr<HorizontalSpacer> Create();
|
||||
|
||||
void AddChildLayers(PaintEventPtr event) override;
|
||||
|
||||
void OnPaintEvent(PaintEventPtr event) override;
|
||||
};
|
||||
|
||||
using HorizontalSpacerPtr = std::shared_ptr<HorizontalSpacer>;
|
35
src/ui_elements/widgets/Label.cpp
Normal file
35
src/ui_elements/widgets/Label.cpp
Normal file
|
@ -0,0 +1,35 @@
|
|||
#include "Label.h"
|
||||
#include "TextElement.h"
|
||||
|
||||
Label::Label()
|
||||
: Widget(),
|
||||
mLabel()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
std::shared_ptr<Label> Label::Create()
|
||||
{
|
||||
return std::make_shared<Label>();
|
||||
}
|
||||
|
||||
void Label::SetLabel(const std::string& text)
|
||||
{
|
||||
mLabel = text;
|
||||
}
|
||||
|
||||
void Label::OnPaintEvent(PaintEventPtr event)
|
||||
{
|
||||
mLayers.clear();
|
||||
AddBackground(event);
|
||||
|
||||
if(!mLabel.empty())
|
||||
{
|
||||
auto middle = DiscretePoint(mLocation.GetX() + mWidth/2,
|
||||
mLocation.GetY() + mHeight/2);
|
||||
auto text = TextElement::Create(mLabel, middle);
|
||||
auto textLayer = VisualLayer::Create();
|
||||
textLayer->SetText(text);
|
||||
mLayers.push_back(textLayer);
|
||||
}
|
||||
}
|
22
src/ui_elements/widgets/Label.h
Normal file
22
src/ui_elements/widgets/Label.h
Normal file
|
@ -0,0 +1,22 @@
|
|||
#pragma once
|
||||
|
||||
#include "Widget.h"
|
||||
|
||||
class Label : public Widget
|
||||
{
|
||||
private:
|
||||
|
||||
std::string mLabel;
|
||||
|
||||
public:
|
||||
|
||||
Label();
|
||||
|
||||
void SetLabel(const std::string& text);
|
||||
|
||||
static std::shared_ptr<Label> Create();
|
||||
|
||||
void OnPaintEvent(PaintEventPtr event);
|
||||
};
|
||||
|
||||
using LabelPtr = std::shared_ptr<Label>;
|
134
src/ui_elements/widgets/Widget.cpp
Normal file
134
src/ui_elements/widgets/Widget.cpp
Normal file
|
@ -0,0 +1,134 @@
|
|||
#include "RectangleElement.h"
|
||||
#include "Widget.h"
|
||||
|
||||
Widget::Widget()
|
||||
: mLocation(DiscretePoint(0, 0)),
|
||||
mWidth(100),
|
||||
mHeight(100),
|
||||
mLayers(),
|
||||
mChildren(),
|
||||
mBackgroundColor(Color::Create(200, 0, 0))
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
Widget::~Widget()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void Widget::AddWidget(WidgetPtr widget)
|
||||
{
|
||||
mChildren.push_back(widget);
|
||||
}
|
||||
|
||||
void Widget::SetSize(unsigned width, unsigned height)
|
||||
{
|
||||
mWidth = width;
|
||||
mHeight = height;
|
||||
}
|
||||
|
||||
std::shared_ptr<Widget> Widget::Create()
|
||||
{
|
||||
return std::make_shared<Widget>();
|
||||
}
|
||||
|
||||
DiscretePoint Widget::GetLocation()
|
||||
{
|
||||
return mLocation;
|
||||
}
|
||||
|
||||
std::vector<VisualLayerPtr> Widget::GetLayers()
|
||||
{
|
||||
return mLayers;
|
||||
}
|
||||
|
||||
void Widget::AddChildLayers(PaintEventPtr event)
|
||||
{
|
||||
for(std::size_t idx=0; idx<mChildren.size(); idx++)
|
||||
{
|
||||
auto child = mChildren[idx];
|
||||
child->SetSize(mWidth, mHeight);
|
||||
child->SetLocation(mLocation);
|
||||
child->OnPaintEvent(event);
|
||||
auto layers = child->GetLayers();
|
||||
mLayers.insert(mLayers.end(), layers.begin(), layers.end());
|
||||
}
|
||||
}
|
||||
|
||||
void Widget::OnPaintEvent(PaintEventPtr event)
|
||||
{
|
||||
mLayers.clear();
|
||||
|
||||
AddBackground(event);
|
||||
AddChildLayers(event);
|
||||
}
|
||||
|
||||
bool Widget::Contains(const DiscretePoint& loc)
|
||||
{
|
||||
if(loc.GetX() < mLocation.GetX()) return false;
|
||||
if(loc.GetX() > mLocation.GetX() + mWidth) return false;
|
||||
if(loc.GetY() > mLocation.GetY() + mHeight) return false;
|
||||
if(loc.GetY() < mLocation.GetY()) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Widget::OnMouseEvent(MouseEventPtr event)
|
||||
{
|
||||
bool inChild = false;
|
||||
for(const auto& child : mChildren)
|
||||
{
|
||||
if(child->OnMouseEvent(event))
|
||||
{
|
||||
inChild = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(!inChild)
|
||||
{
|
||||
if(Contains(event->GetClientLocation()))
|
||||
{
|
||||
OnMyMouseEvent(event);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void Widget::OnMyMouseEvent(MouseEventPtr event)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void Widget::AddBackground(PaintEventPtr event)
|
||||
{
|
||||
auto shape = RectangleElement::Create(mLocation, mWidth, mHeight);
|
||||
shape->SetFillColor(mBackgroundColor);
|
||||
auto shapeLayer = VisualLayer::Create();
|
||||
shapeLayer->SetShape(shape);
|
||||
mLayers.push_back(shapeLayer);
|
||||
}
|
||||
|
||||
void Widget::SetBackgroundColor(ColorPtr color)
|
||||
{
|
||||
mBackgroundColor = color;
|
||||
}
|
||||
|
||||
void Widget::SetLocation(const DiscretePoint& loc)
|
||||
{
|
||||
mLocation = loc;
|
||||
}
|
||||
|
||||
unsigned Widget::GetWidth()
|
||||
{
|
||||
return mWidth;
|
||||
}
|
||||
|
||||
unsigned Widget::GetHeight()
|
||||
{
|
||||
return mHeight;
|
||||
}
|
62
src/ui_elements/widgets/Widget.h
Normal file
62
src/ui_elements/widgets/Widget.h
Normal file
|
@ -0,0 +1,62 @@
|
|||
#pragma once
|
||||
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
|
||||
#include "DiscretePoint.h"
|
||||
#include "VisualLayer.h"
|
||||
#include "PaintEvent.h"
|
||||
#include "Color.h"
|
||||
#include "MouseEvent.h"
|
||||
|
||||
class Widget
|
||||
{
|
||||
protected:
|
||||
|
||||
DiscretePoint mLocation;
|
||||
unsigned mWidth;
|
||||
unsigned mHeight;
|
||||
std::vector<VisualLayerPtr> mLayers;
|
||||
std::vector<std::shared_ptr<Widget> > mChildren;
|
||||
ColorPtr mBackgroundColor;
|
||||
|
||||
public:
|
||||
|
||||
Widget();
|
||||
|
||||
virtual ~Widget();
|
||||
|
||||
void AddWidget(std::shared_ptr<Widget> widget);
|
||||
|
||||
void SetBackgroundColor(ColorPtr color);
|
||||
|
||||
void SetSize(unsigned mWidth, unsigned mHeight);
|
||||
|
||||
DiscretePoint GetLocation();
|
||||
|
||||
void SetLocation(const DiscretePoint& loc);
|
||||
|
||||
unsigned GetWidth();
|
||||
|
||||
unsigned GetHeight();
|
||||
|
||||
std::vector<VisualLayerPtr> GetLayers();
|
||||
|
||||
static std::shared_ptr<Widget> Create();
|
||||
|
||||
virtual void OnPaintEvent(PaintEventPtr event);
|
||||
|
||||
virtual bool OnMouseEvent(MouseEventPtr event);
|
||||
|
||||
bool Contains(const DiscretePoint& loc);
|
||||
|
||||
protected:
|
||||
|
||||
virtual void OnMyMouseEvent(MouseEventPtr event);
|
||||
|
||||
virtual void AddChildLayers(PaintEventPtr event);
|
||||
|
||||
virtual void AddBackground(PaintEventPtr event);
|
||||
};
|
||||
|
||||
using WidgetPtr = std::shared_ptr<Widget>;
|
36
src/ui_elements/widgets/elements/GeometryElement.cpp
Normal file
36
src/ui_elements/widgets/elements/GeometryElement.cpp
Normal file
|
@ -0,0 +1,36 @@
|
|||
#include "GeometryElement.h"
|
||||
|
||||
GeometryElement::GeometryElement()
|
||||
: mFillColor(Color::Create(255, 255, 255)),
|
||||
mStrokeColor(Color::Create(0, 0, 0)),
|
||||
mStrokeThickness(1),
|
||||
mType(Type::Path)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
ColorPtr GeometryElement::GetFillColor()
|
||||
{
|
||||
return mFillColor;
|
||||
}
|
||||
ColorPtr GeometryElement::GetStrokeColor()
|
||||
{
|
||||
return mStrokeColor;
|
||||
}
|
||||
unsigned GeometryElement::GetStrokeThickness()
|
||||
{
|
||||
return mStrokeThickness;
|
||||
}
|
||||
|
||||
void GeometryElement::SetFillColor(ColorPtr color)
|
||||
{
|
||||
mFillColor = color;
|
||||
}
|
||||
void GeometryElement::SetStrokeColor(ColorPtr color)
|
||||
{
|
||||
mStrokeColor = color;
|
||||
}
|
||||
void GeometryElement::SetStrokeThickness(unsigned thickness)
|
||||
{
|
||||
mStrokeThickness = thickness;
|
||||
}
|
39
src/ui_elements/widgets/elements/GeometryElement.h
Normal file
39
src/ui_elements/widgets/elements/GeometryElement.h
Normal file
|
@ -0,0 +1,39 @@
|
|||
#pragma once
|
||||
|
||||
#include "Color.h"
|
||||
|
||||
class GeometryElement
|
||||
{
|
||||
public:
|
||||
|
||||
enum class Type
|
||||
{
|
||||
Path,
|
||||
Rectangle,
|
||||
Circle,
|
||||
Arc
|
||||
};
|
||||
|
||||
private:
|
||||
|
||||
ColorPtr mFillColor;
|
||||
ColorPtr mStrokeColor;
|
||||
unsigned mStrokeThickness;
|
||||
Type mType;
|
||||
|
||||
public:
|
||||
|
||||
GeometryElement();
|
||||
virtual ~GeometryElement() = default;
|
||||
|
||||
ColorPtr GetFillColor();
|
||||
ColorPtr GetStrokeColor();
|
||||
unsigned GetStrokeThickness();
|
||||
virtual Type GetType() = 0;
|
||||
|
||||
void SetFillColor(ColorPtr color);
|
||||
void SetStrokeColor(ColorPtr color);
|
||||
void SetStrokeThickness(unsigned thickness);
|
||||
};
|
||||
|
||||
using GeometryElementPtr = std::shared_ptr<GeometryElement>;
|
36
src/ui_elements/widgets/elements/RectangleElement.cpp
Normal file
36
src/ui_elements/widgets/elements/RectangleElement.cpp
Normal file
|
@ -0,0 +1,36 @@
|
|||
#include "RectangleElement.h"
|
||||
|
||||
RectangleElement::RectangleElement(const DiscretePoint& loc,
|
||||
unsigned width, unsigned height)
|
||||
: mLocation(loc),
|
||||
mWidth(width),
|
||||
mHeight(height)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
std::shared_ptr<RectangleElement> RectangleElement::Create(const DiscretePoint& loc,
|
||||
unsigned width, unsigned height)
|
||||
{
|
||||
return std::make_shared<RectangleElement>(loc, width, height);
|
||||
}
|
||||
|
||||
GeometryElement::Type RectangleElement::GetType()
|
||||
{
|
||||
return GeometryElement::Type::Rectangle;
|
||||
}
|
||||
|
||||
DiscretePoint RectangleElement::GetLocation()
|
||||
{
|
||||
return mLocation;
|
||||
}
|
||||
|
||||
unsigned RectangleElement::GetWidth()
|
||||
{
|
||||
return mWidth;
|
||||
}
|
||||
|
||||
unsigned RectangleElement::GetHeight()
|
||||
{
|
||||
return mHeight;
|
||||
}
|
29
src/ui_elements/widgets/elements/RectangleElement.h
Normal file
29
src/ui_elements/widgets/elements/RectangleElement.h
Normal file
|
@ -0,0 +1,29 @@
|
|||
#pragma once
|
||||
|
||||
#include <memory>
|
||||
|
||||
#include "GeometryElement.h"
|
||||
#include "DiscretePoint.h"
|
||||
|
||||
class RectangleElement : public GeometryElement
|
||||
{
|
||||
DiscretePoint mLocation;
|
||||
unsigned mWidth;
|
||||
unsigned mHeight;
|
||||
|
||||
public:
|
||||
|
||||
RectangleElement(const DiscretePoint& loc,
|
||||
unsigned width, unsigned height);
|
||||
static std::shared_ptr<RectangleElement> Create(const DiscretePoint& loc,
|
||||
unsigned width, unsigned height);
|
||||
GeometryElement::Type GetType() override;
|
||||
|
||||
DiscretePoint GetLocation();
|
||||
unsigned GetWidth();
|
||||
unsigned GetHeight();
|
||||
};
|
||||
|
||||
using RectangleElementPtr = std::shared_ptr<RectangleElement>;
|
||||
|
||||
|
39
src/ui_elements/widgets/elements/TextElement.cpp
Normal file
39
src/ui_elements/widgets/elements/TextElement.cpp
Normal file
|
@ -0,0 +1,39 @@
|
|||
#include "TextElement.h"
|
||||
|
||||
TextElement::TextElement(const std::string& content, const DiscretePoint& loc)
|
||||
: mContent(content),
|
||||
mLocation(loc),
|
||||
mFontLabel("fixed")
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
TextElement::~TextElement()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
std::shared_ptr<TextElement> TextElement::Create(const std::string& content, const DiscretePoint& loc)
|
||||
{
|
||||
return std::make_shared<TextElement>(content, loc);
|
||||
}
|
||||
|
||||
DiscretePoint TextElement::GetLocation()
|
||||
{
|
||||
return mLocation;
|
||||
}
|
||||
|
||||
void TextElement::SetContent(const std::string& content)
|
||||
{
|
||||
mContent = content;
|
||||
}
|
||||
|
||||
std::string TextElement::GetFontLabel()
|
||||
{
|
||||
return mFontLabel;
|
||||
}
|
||||
|
||||
std::string TextElement::GetContent()
|
||||
{
|
||||
return mContent;
|
||||
}
|
31
src/ui_elements/widgets/elements/TextElement.h
Normal file
31
src/ui_elements/widgets/elements/TextElement.h
Normal file
|
@ -0,0 +1,31 @@
|
|||
#pragma once
|
||||
|
||||
#include <memory>
|
||||
#include <string>
|
||||
|
||||
#include "DiscretePoint.h"
|
||||
|
||||
class TextElement
|
||||
{
|
||||
std::string mContent;
|
||||
DiscretePoint mLocation;
|
||||
std::string mFontLabel;
|
||||
|
||||
public:
|
||||
|
||||
TextElement(const std::string& content, const DiscretePoint& loc);
|
||||
|
||||
~TextElement();
|
||||
|
||||
static std::shared_ptr<TextElement> Create(const std::string& content, const DiscretePoint& loc);
|
||||
|
||||
DiscretePoint GetLocation();
|
||||
|
||||
std::string GetContent();
|
||||
|
||||
void SetContent(const std::string& content);
|
||||
|
||||
std::string GetFontLabel();
|
||||
};
|
||||
|
||||
using TextElementPtr = std::shared_ptr<TextElement>;
|
38
src/ui_elements/widgets/elements/VisualLayer.cpp
Normal file
38
src/ui_elements/widgets/elements/VisualLayer.cpp
Normal file
|
@ -0,0 +1,38 @@
|
|||
#include "VisualLayer.h"
|
||||
|
||||
VisualLayer::VisualLayer()
|
||||
: mShape(),
|
||||
mText()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
std::shared_ptr<VisualLayer> VisualLayer::Create()
|
||||
{
|
||||
return std::make_shared<VisualLayer>();
|
||||
}
|
||||
|
||||
void VisualLayer::SetShape(GeometryElementPtr shape)
|
||||
{
|
||||
mShape = shape;
|
||||
}
|
||||
void VisualLayer::SetText(TextElementPtr text)
|
||||
{
|
||||
mText = text;
|
||||
}
|
||||
bool VisualLayer::HasShape()
|
||||
{
|
||||
return bool(mShape);
|
||||
}
|
||||
bool VisualLayer::HasText()
|
||||
{
|
||||
return bool(mText);
|
||||
}
|
||||
GeometryElementPtr VisualLayer::GetShape()
|
||||
{
|
||||
return mShape;
|
||||
}
|
||||
TextElementPtr VisualLayer::GetText()
|
||||
{
|
||||
return mText;
|
||||
}
|
26
src/ui_elements/widgets/elements/VisualLayer.h
Normal file
26
src/ui_elements/widgets/elements/VisualLayer.h
Normal file
|
@ -0,0 +1,26 @@
|
|||
#pragma once
|
||||
#include <memory>
|
||||
|
||||
#include "GeometryElement.h"
|
||||
#include "TextElement.h"
|
||||
|
||||
class VisualLayer
|
||||
{
|
||||
GeometryElementPtr mShape;
|
||||
TextElementPtr mText;
|
||||
|
||||
public:
|
||||
|
||||
VisualLayer();
|
||||
|
||||
static std::shared_ptr<VisualLayer> Create();
|
||||
|
||||
void SetShape(GeometryElementPtr shape);
|
||||
void SetText(TextElementPtr text);
|
||||
bool HasShape();
|
||||
bool HasText();
|
||||
GeometryElementPtr GetShape();
|
||||
TextElementPtr GetText();
|
||||
|
||||
};
|
||||
using VisualLayerPtr = std::shared_ptr<VisualLayer>;
|
19
src/web/CMakeLists.txt
Normal file
19
src/web/CMakeLists.txt
Normal file
|
@ -0,0 +1,19 @@
|
|||
list(APPEND web_LIB_INCLUDES
|
||||
xml/XmlParser.cpp
|
||||
xml/XmlDocument.cpp
|
||||
xml/XmlElement.cpp
|
||||
xml/XmlAttribute.cpp
|
||||
xml/XmlProlog.cpp
|
||||
markdown/MarkdownParser.cpp
|
||||
html/HtmlWriter.cpp
|
||||
html/HtmlDocument.cpp)
|
||||
|
||||
# add the executable
|
||||
add_library(web SHARED ${web_LIB_INCLUDES})
|
||||
|
||||
target_include_directories(web PUBLIC
|
||||
"${PROJECT_SOURCE_DIR}/src/core/"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/xml"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/html"
|
||||
)
|
12
src/web/html/HtmlDocument.cpp
Normal file
12
src/web/html/HtmlDocument.cpp
Normal file
|
@ -0,0 +1,12 @@
|
|||
#include "HtmlDocument.h"
|
||||
|
||||
HtmlDocument::HtmlDocument()
|
||||
: XmlDocument()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
std::shared_ptr<HtmlDocument> HtmlDocument::Create()
|
||||
{
|
||||
return std::make_shared<HtmlDocument>();
|
||||
}
|
14
src/web/html/HtmlDocument.h
Normal file
14
src/web/html/HtmlDocument.h
Normal file
|
@ -0,0 +1,14 @@
|
|||
#pragma once
|
||||
#include <memory>
|
||||
#include "XmlDocument.h"
|
||||
|
||||
class HtmlDocument : public XmlDocument
|
||||
{
|
||||
public:
|
||||
|
||||
HtmlDocument();
|
||||
|
||||
static std::shared_ptr<HtmlDocument> Create();
|
||||
};
|
||||
|
||||
using HtmlDocumentPtr = std::shared_ptr<HtmlDocument>;
|
0
src/web/html/HtmlDomManager.cpp
Normal file
0
src/web/html/HtmlDomManager.cpp
Normal file
0
src/web/html/HtmlDomManager.h
Normal file
0
src/web/html/HtmlDomManager.h
Normal file
11
src/web/html/HtmlElement.cpp
Normal file
11
src/web/html/HtmlElement.cpp
Normal file
|
@ -0,0 +1,11 @@
|
|||
#include "HtmlElement.h"
|
||||
|
||||
HtmlElement::HtmlElement()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
static std::shared_ptr<HtmlElement> HtmlElement::Create()
|
||||
{
|
||||
return std::make_shared<HtmlElement>();
|
||||
}
|
12
src/web/html/HtmlElement.h
Normal file
12
src/web/html/HtmlElement.h
Normal file
|
@ -0,0 +1,12 @@
|
|||
#pragma once
|
||||
#include <memory>
|
||||
#include "XmlElement.h"
|
||||
|
||||
class HtmlElement : public XmlElement
|
||||
{
|
||||
HtmlElement();
|
||||
|
||||
static std::shared_ptr<HtmlElement> Create();
|
||||
};
|
||||
|
||||
using HtmlElementPtr = std::shared_ptr<HtmlElement>;
|
11
src/web/html/HtmlWriter.cpp
Normal file
11
src/web/html/HtmlWriter.cpp
Normal file
|
@ -0,0 +1,11 @@
|
|||
#include "HtmlWriter.h"
|
||||
|
||||
HtmlWriter::HtmlWriter()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
std::string HtmlWriter::ToString(HtmlDocumentPtr document)
|
||||
{
|
||||
return "<html>Uh oh!!!!</html>";
|
||||
}
|
12
src/web/html/HtmlWriter.h
Normal file
12
src/web/html/HtmlWriter.h
Normal file
|
@ -0,0 +1,12 @@
|
|||
#pragma once
|
||||
|
||||
#include "HtmlDocument.h"
|
||||
|
||||
class HtmlWriter
|
||||
{
|
||||
public:
|
||||
|
||||
HtmlWriter();
|
||||
|
||||
std::string ToString(HtmlDocumentPtr document);
|
||||
};
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue