add first code

This commit is contained in:
j3d1 2018-10-19 13:49:11 +02:00
parent f207af2c4a
commit 8bf49928e5
5 changed files with 181 additions and 1 deletions

66
inc/col.h Normal file
View file

@ -0,0 +1,66 @@
class Node;
typedef void (*drawfun_t)(int offset, int size, Node*);
void draw_menu(int, int, Node*);
class Drawable{
public:
const int minsize;
const int maxsize;
drawfun_t render;
Drawable(drawfun_t fun, int min = 0, int max=~0): minsize(min), maxsize(max), render(fun){
}
};
class Node{
private:
Node* parent_ = 0;
Node* child_ = 0;
Node* next_ = 0;
void addNodes(bool b){
}
template<class ...Us>
void addNodes(bool b, Node* n, Us ... ns){
next_ = n;
next_->parent_ = parent_;
next_->addNodes(!b,ns...);
}
public:
Drawable view;
const char* title_ = 0;
Node(): next_(nullptr), child_(nullptr), parent_(nullptr), view(nullptr){
}
Node(const char* t, drawfun_t fun=draw_menu) : title_(t), view(fun), next_(nullptr), child_(nullptr), parent_(nullptr){
}
template<typename ... Args>
Node(const char* t, Node* n, Args ... ns) : title_(t), view(nullptr){
child_ = n;
n->parent_=this;
child_->addNodes(true,ns...);
}
void p(int i);
};
class Value: public Node{
public:
const char* header;
int state;
Value(const char* t, int val, drawfun_t fun): Node(t, fun), header(t), state(val){
}
};
class Layout{
private:
int menuthrs_;
public:
Layout(int max) : menuthrs_(max){
}
//slots
};

11
inc/hal.h Normal file
View file

@ -0,0 +1,11 @@
void print(const char* str);
void print(int str);
#ifndef LINUX
void * operator new(unsigned int size);
void operator delete(void * ptr);
#endif

29
src/col.cpp Normal file
View file

@ -0,0 +1,29 @@
#include "hal.h"
#include "col.h"
void Node::p(int i){
for(int j = 0; j < i; j++){ print("__"); }
if(title_)
print(title_);
else
print("--");
if(view.render)
view.render(0,0,this);
print("\n");
if(child_)
child_->p(i+1);
if(next_)
next_->p(i);
}
void draw_menu(int offset, int size, Node* val){
}

35
src/hal.cpp Normal file
View file

@ -0,0 +1,35 @@
#ifdef LINUX
#include <iostream>
void print(const char* str){
std::cout << str << std::flush;
}
void print(int str){
std::cout << str << std::flush;
}
#else
#include <stdlib.h>
void * operator new(unsigned int size)
{
return malloc(size);
}
void operator delete(void * ptr)
{
free(ptr);
}
void print(const char* str){
}
void print(int str){
}
#endif

View file

@ -1,6 +1,45 @@
#include "hal.h"
#include "col.h"
void draw_foo(int offset, int size, Node* ptr){
Value* val = (Value*) ptr;
print("\t|");
if(ptr)
print(ptr->title_);
//print(ptr->state);
print("|");
}
void draw_blub(int offset, int size, Node* val){
}
int main() {
return 0;
Node root(nullptr,
new Node("foo",
new Node("foo",
new Node("foo", new Value("FOO",5,draw_foo))
),
new Node("foo", new Value("FOO",5,draw_foo)),
new Node("foo", new Value("FOO",5,draw_foo))
),
new Node("blub", new Value("BLUB",5,draw_blub)),
new Node("blub", new Value("BLUB",5,draw_blub)),
new Node("blub", new Value("BLUB",5,draw_blub))
);
root.p(0);
// 128 x 32
Layout l(64);
//build tree
//walk tree + allocate slots
//position slots
//render
}