Set project name back to _template
[fltk_mvc_template.git] / _template / src / ViewFluid.fld
1 # data file for the Fltk User Interface Designer (fluid)
2 version 1.0304
3 header_name {.h}
4 code_name {.cxx}
5 declblock {\#include <FL/fl_draw.H>} {open public after {\#include <FL/Fl_Table_Row.H>}
6 } {}
7
8 declblock {\#include <string>} {open public after {\#include <vector>}
9 } {}
10
11 class SimpleTable {open : {public Fl_Table_Row}
12 } {
13   Function {draw_cell(TableContext context, int R=0, int C=0, int X=0, int Y=0, int W=0, int H=0)} {open return_type void
14   } {
15     code {static char s[40];
16     switch ( context ) {
17       case CONTEXT_STARTPAGE:                   // before page is drawn..
18         fl_font(FL_HELVETICA, 16);              // set the font for our drawing operations
19         return; 
20       case CONTEXT_COL_HEADER:                  // Draw column headers
21         sprintf(s,"%c",'A'+C);                // "A", "B", "C", etc.
22         DrawHeader(s,X,Y,W,H);
23         return; 
24       case CONTEXT_ROW_HEADER:                  // Draw row headers
25         sprintf(s,"%02d:",R);                 // "001:", "002:", etc
26         DrawHeader(s,X,Y,W,H);
27         return; 
28       case CONTEXT_CELL:                        // Draw data in cells
29         if((int)m_TableData.size()-1 < R)
30                 SetTableData("", 0, R);
31         
32         if((int)m_TableData.at(R).size()-1 < C)
33                 SetTableData("", C, 0);
34                                 
35         DrawData(m_TableData.at(R).at(C).c_str(),
36                  m_CellColors.at(R).at(C),X,Y,W,H);
37         return;
38       default:
39         return;
40  }} {}
41   }
42   Function {SimpleTable(int x, int y, int w, int h, const char *l = 0) : Fl_Table_Row(x,y,w,h,l)} {} {
43     code {} {}
44   }
45   Function {SetTableData(std::string data, unsigned int x = 0, unsigned int y = 0, Fl_Color color = FL_WHITE)} {return_type void
46   } {
47     code {if(m_TableData.empty() || (m_TableData.size() < y+1))
48 {
49     m_TableData.resize(y+1);
50     rows(y+1);
51 }
52
53 for (unsigned int i = 0; i < m_TableData.size(); ++i)
54     if(m_TableData.at(i).empty() || 
55       (m_TableData.at(i).size() < x+1))
56     {
57         m_TableData.at(i).resize(x+1, "");   
58         cols(x+1);
59     }   
60
61 m_TableData.at(y).at(x) = data;
62 SetCellColor(color,x,y);} {}
63   }
64   Function {SetCellColor(Fl_Color color, unsigned int x = 0, unsigned int y = 0)} {return_type void
65   } {
66     code {if(m_CellColors.empty() || (m_CellColors.size() < y+1))
67 {
68     m_CellColors.resize(y+1);
69     rows(y+1);
70 }
71
72 for (unsigned int i = 0; i < m_CellColors.size(); ++i)
73     if(m_CellColors.at(i).empty() || 
74       (m_CellColors.at(i).size() < x+1))
75     {
76         m_CellColors.at(i).resize(x+1, FL_WHITE);   
77         cols(x+1);
78     }   
79
80 m_CellColors.at(y).at(x) = color;} {}
81   }
82   Function {GetTableData()} {return_type {std::vector<std::vector<std::string>>}
83   } {
84     code {return m_TableData;} {}
85   }
86   Function {Resize(unsigned int x = 0, unsigned int y = 0)} {} {
87     code {m_TableData.resize(y+1);
88 m_CellColors.resize(y+1);
89 rows(y+1);
90 for (unsigned int i = 0; i < m_TableData.size(); ++i)
91 {
92     m_CellColors.at(i).resize(x+1, FL_WHITE);
93     m_TableData.at(i).resize(x+1, "");   
94 }       
95 cols(x+1);} {}
96   }
97   decl {using TableData = std::vector<std::vector<std::string>>;} {public local
98   }
99   decl {using TableCellColors = std::vector<std::vector<Fl_Color>>;} {public local
100   }
101   Function {DrawData(const char *s, Fl_Color cell_color, int X, int Y, int W, int H)} {private return_type void
102   } {
103     code {fl_push_clip(X,Y,W,H);
104       // Draw cell bg
105       fl_color(cell_color); fl_rectf(X,Y,W,H);
106       // Draw cell data
107       fl_color(FL_GRAY0); fl_draw(s, X,Y,W,H, FL_ALIGN_CENTER);
108       // Draw box border
109       fl_color(color()); fl_rect(X,Y,W,H);
110 fl_pop_clip();} {}
111   }
112   Function {DrawHeader(const char *s, int X, int Y, int W, int H)} {private return_type void
113   } {
114     code {fl_push_clip(X,Y,W,H);
115       fl_draw_box(FL_THIN_UP_BOX, X,Y,W,H, row_header_color());
116       fl_color(FL_BLACK);
117       fl_draw(s, X,Y,W,H, FL_ALIGN_CENTER);
118 fl_pop_clip();} {}
119   }
120   decl {TableData m_TableData;} {private local
121   }
122   decl {TableCellColors m_CellColors;} {private local
123   }
124 }
125
126 class ViewFluid {} {
127   Function {ViewFluid()} {protected
128   } {
129     Fl_Window win_exmpl {
130       label Example open
131       protected xywh {728 312 500 300} type Double box GTK_DOWN_BOX hide hotspot size_range {585 555 0 0}
132     } {
133       Fl_Button btn_exception {
134         label {Throw Exception}
135         protected xywh {20 120 135 45}
136       }
137       Fl_Table tbl_example {open
138         protected tooltip {Simple Table Implementation Example} xywh {170 0 330 300}
139         class SimpleTable
140       } {}
141     }
142   }
143 }