The files contained in this repository can be downloaded to your computer using a svn client.
On Linux you simply type the command displayed below.

This URL has Read-Only access.

Statistics
| Revision:

root / trunk / DomotiGa / FEditGraphs.class @ 621

History | View | Annotate | Download (16.9 kB)

1 416 rdnzl
' Gambas class file
2 416 rdnzl
3 416 rdnzl
' Description:
4 416 rdnzl
' FEditGraphs.class
5 416 rdnzl
' Support for creating and editing custom rrdtool graphs.
6 416 rdnzl
7 416 rdnzl
' Development Status:
8 416 rdnzl
' Needs Testing.
9 416 rdnzl
10 416 rdnzl
' DomotiGa - an open source home automation program.
11 416 rdnzl
' Copyright(C) 2008-2010 Ron Klinkien
12 416 rdnzl
13 416 rdnzl
' This module is written by and Copyright(C) 2010 Minus
14 416 rdnzl
15 416 rdnzl
' Read file called COPYING for license details.
16 416 rdnzl
17 433 rdnzl
PUBLIC rGraph AS Result
18 433 rdnzl
19 416 rdnzl
PUBLIC SUB Form_Open()
20 416 rdnzl
21 416 rdnzl
  ME.Move(FMain.X + 50, FMain.Y + 70)
22 416 rdnzl
  Populate_device_list()
23 416 rdnzl
  Reset_graph()
24 416 rdnzl
  Graph_list()
25 433 rdnzl
  PopulateGroups()
26 416 rdnzl
27 416 rdnzl
END
28 416 rdnzl
29 416 rdnzl
PUBLIC SUB ComboBoxGraph_name_Change()
30 416 rdnzl
31 433 rdnzl
  IF ComboBoxGraph_name.Text <> " " THEN
32 433 rdnzl
    TRY rGraph = Main.hDB.Exec("SELECT name FROM graphs WHERE name = &1", ComboBoxGraph_name.Text)
33 433 rdnzl
    IF rGraph.Count <> 0 THEN
34 433 rdnzl
      Load_graph(ComboBoxGraph_name.Text)
35 433 rdnzl
      FrameGraph_data.Enabled = TRUE
36 433 rdnzl
      FramePreview.Enabled = TRUE
37 433 rdnzl
      Load_graph_data(ComboBoxGraph_name.Tag, ComboBoxGraphList.Text)
38 433 rdnzl
      AssignGroups()
39 433 rdnzl
    ENDIF
40 433 rdnzl
  ELSE
41 433 rdnzl
    Populate_device_list()
42 433 rdnzl
    Reset_graph()
43 433 rdnzl
    Reset_graph_data()
44 433 rdnzl
  ENDIF
45 416 rdnzl
46 416 rdnzl
END
47 416 rdnzl
48 416 rdnzl
PUBLIC SUB ComboBoxGraph_device_Change() ' select device -> update ds
49 416 rdnzl
50 416 rdnzl
  DIM rDevice AS Result
51 416 rdnzl
52 416 rdnzl
  ComboBoxGraph_ds.Clear
53 418 rdnzl
  TRY rDevice = Main.hDB.Exec("SELECT name, valuerrddsname, value2rrddsname, value3rrddsname, value4rrddsname FROM devices WHERE name = &1", ComboBoxGraph_device.Text)
54 416 rdnzl
  IF rDevice THEN
55 416 rdnzl
    FOR EACH rDevice
56 416 rdnzl
      IF rDevice!valuerrddsname THEN
57 416 rdnzl
        ComboBoxGraph_ds.Add(rDevice!valuerrddsname)
58 416 rdnzl
      ENDIF
59 416 rdnzl
      IF rDevice!value2rrddsname THEN
60 416 rdnzl
        ComboBoxGraph_ds.Add(rDevice!value2rrddsname)
61 416 rdnzl
      ENDIF
62 416 rdnzl
      IF rDevice!value3rrddsname THEN
63 416 rdnzl
        ComboBoxGraph_ds.Add(rDevice!value3rrddsname)
64 416 rdnzl
      ENDIF
65 416 rdnzl
      IF rDevice!value4rrddsname THEN
66 416 rdnzl
        ComboBoxGraph_ds.Add(rDevice!value4rrddsname)
67 416 rdnzl
      ENDIF
68 416 rdnzl
    NEXT
69 416 rdnzl
  ENDIF
70 416 rdnzl
71 416 rdnzl
END
72 416 rdnzl
73 416 rdnzl
PUBLIC SUB Reset_graph()
74 416 rdnzl
75 416 rdnzl
  ComboBoxGraph_name.Tag = ""
76 416 rdnzl
77 416 rdnzl
  TGraphComment.Text = ""
78 416 rdnzl
79 416 rdnzl
  ' checkbox min/max/last/avg
80 416 rdnzl
  CheckBoxGraph_min.Value = 0
81 416 rdnzl
  CheckBoxGraph_max.Value = 0
82 416 rdnzl
  CheckBoxGraph_avg.Value = 0
83 416 rdnzl
  CheckBoxGraph_last.Value = 0
84 416 rdnzl
85 416 rdnzl
  ' title
86 416 rdnzl
  Graph_title.Text = ""
87 416 rdnzl
  Graph_unit.Text = ""
88 416 rdnzl
89 416 rdnzl
  ' grid
90 416 rdnzl
  ComboBoxGraph_gridtype.Text = "Default"
91 416 rdnzl
92 416 rdnzl
  ' general color
93 416 rdnzl
  ColorButtonGraph_background.Value = 16777215
94 416 rdnzl
  ColorButtonGraph_canvas.Value = 16777215
95 433 rdnzl
  ColorButtonGraph_shadea.Value = 16777215
96 433 rdnzl
  ColorButtonGraph_shadeb.Value = 16777215
97 416 rdnzl
  ColorButtonGraph_font.Value = 0
98 416 rdnzl
  ColorButtonGraph_grid.Value = 0
99 416 rdnzl
  ColorButtonGraph_majorgrid.Value = 0
100 416 rdnzl
  ColorButtonGraph_frame.Value = 0
101 416 rdnzl
  ColorButtonGraph_axis.Value = 0
102 416 rdnzl
  ColorButtonGraph_arrow.Value = 0
103 416 rdnzl
104 416 rdnzl
  ' size
105 416 rdnzl
  ComboBoxGraph_width.Text = "400"
106 416 rdnzl
  ComboBoxGraph_height.Text = "100"
107 416 rdnzl
108 416 rdnzl
  CheckBoxLogarithmicscale.Value = 0
109 416 rdnzl
  ComboBoxGraphList.Text = 1
110 416 rdnzl
111 416 rdnzl
END
112 416 rdnzl
113 416 rdnzl
PUBLIC SUB Reset_graph_data()
114 416 rdnzl
115 416 rdnzl
  TextBoxGraph_name.Clear
116 416 rdnzl
  ColorButtonGraph.Value = 65280
117 416 rdnzl
118 416 rdnzl
  ComboBoxGraph_device.Clear
119 416 rdnzl
  ComboBoxGraph_ds.Clear
120 416 rdnzl
121 416 rdnzl
  CheckBoxGraph_graphvalue_min.Value = 0
122 416 rdnzl
  CheckBoxGraph_graphvalue_max.Value = 0
123 416 rdnzl
  CheckBoxGraph_graphvalue_avg.Value = 0
124 416 rdnzl
  ColorButtonGraph_graphvalue_min_color.Value = 0
125 416 rdnzl
  ColorButtonGraph_graphvalue_max_color.Value = 0
126 416 rdnzl
  ColorButtonGraph_graphvalue_avg_color.Value = 0
127 416 rdnzl
128 416 rdnzl
  CheckBoxGraph_min.Value = 0
129 416 rdnzl
  CheckBoxGraph_max.Value = 0
130 416 rdnzl
  CheckBoxGraph_avg.Value = 0
131 416 rdnzl
  CheckBoxGraph_last.Value = 0
132 416 rdnzl
133 416 rdnzl
  ComboBoxGraphList.Tag = ""
134 416 rdnzl
135 416 rdnzl
  CheckBoxShift.Value = 0
136 416 rdnzl
  SpinBoxShift.Value = 0
137 416 rdnzl
  CheckBoxShift.Value = 0
138 416 rdnzl
  SpinBoxTrend.Value = 0
139 416 rdnzl
140 416 rdnzl
  CheckBoxOperation.Value = 0
141 416 rdnzl
  SpinBoxOperation.Value = 0
142 416 rdnzl
  ComboBoxOperation.Text = "+"
143 416 rdnzl
144 416 rdnzl
  FrameGraph_data.Enabled = FALSE
145 416 rdnzl
  FramePreview.Enabled = FALSE
146 416 rdnzl
147 416 rdnzl
END
148 416 rdnzl
149 416 rdnzl
PUBLIC SUB Graph_list()
150 416 rdnzl
151 416 rdnzl
  ComboBoxGraph_name.Clear
152 416 rdnzl
  ComboBoxGraph_name.Add(" ")
153 416 rdnzl
154 433 rdnzl
  TRY rGraph = Main.hDB.Exec("SELECT name, groups FROM graphs")
155 416 rdnzl
  IF rGraph THEN
156 416 rdnzl
    FOR EACH rGraph
157 416 rdnzl
      ComboBoxGraph_name.Add(rGraph!name)
158 416 rdnzl
    NEXT
159 416 rdnzl
  ENDIF
160 416 rdnzl
161 416 rdnzl
END
162 416 rdnzl
163 416 rdnzl
PUBLIC SUB Grid_type(grid_type_txt AS String) AS String
164 416 rdnzl
165 416 rdnzl
  DIM grid_type_rrdCmd AS String
166 416 rdnzl
167 416 rdnzl
  SELECT CASE grid_type_txt
168 416 rdnzl
    CASE "Default"
169 416 rdnzl
      grid_type_rrdCmd = "--grid-dash '1:1'"
170 416 rdnzl
      RETURN grid_type_rrdCmd
171 416 rdnzl
    CASE "Dot Grid"
172 416 rdnzl
      grid_type_rrdCmd = "--grid-dash '1:3'"
173 416 rdnzl
      RETURN grid_type_rrdCmd
174 416 rdnzl
    CASE "Full Grid"
175 416 rdnzl
      grid_type_rrdCmd = "--grid-dash '1:0'"
176 416 rdnzl
      RETURN grid_type_rrdCmd
177 416 rdnzl
  END SELECT
178 416 rdnzl
179 416 rdnzl
END
180 416 rdnzl
181 416 rdnzl
PUBLIC SUB Load_graph(Graph_name AS String) AS Boolean
182 416 rdnzl
183 416 rdnzl
  DIM Graph_id AS Integer
184 416 rdnzl
185 416 rdnzl
  TRY rGraph = Main.hDB.Exec("SELECT * FROM graphs WHERE name = &1", Graph_name)
186 416 rdnzl
  IF rGraph.Count <> 0 THEN
187 416 rdnzl
    Graph_id = rGraph!id
188 416 rdnzl
    ComboBoxGraph_name.Tag = rGraph!id
189 416 rdnzl
190 416 rdnzl
    ColorButtonGraph_background.Value = rGraph!color_background
191 416 rdnzl
    ColorButtonGraph_canvas.Value = rGraph!color_canvas
192 416 rdnzl
    ColorButtonGraph_shadea.Value = rGraph!color_shadea
193 416 rdnzl
    ColorButtonGraph_shadeb.Value = rGraph!color_shadeb
194 416 rdnzl
    ColorButtonGraph_font.Value = rGraph!color_font
195 416 rdnzl
    ColorButtonGraph_grid.Value = rGraph!color_grid
196 416 rdnzl
    ColorButtonGraph_majorgrid.Value = rGraph!color_majorgrid
197 416 rdnzl
    ColorButtonGraph_frame.Value = rGraph!color_frame
198 416 rdnzl
    ColorButtonGraph_axis.Value = rGraph!color_axis
199 416 rdnzl
    ColorButtonGraph_arrow.Value = rGraph!color_arrow
200 416 rdnzl
201 416 rdnzl
    Graph_title.Text = rGraph!graph_title
202 416 rdnzl
    Graph_unit.Text = rGraph!unit
203 416 rdnzl
    ComboBoxGraph_gridtype.Text = rGraph!grid_type
204 416 rdnzl
    TGraphComment.Text = rGraph!comments
205 416 rdnzl
206 416 rdnzl
    CheckBoxDate.Value = rGraph!date
207 416 rdnzl
208 416 rdnzl
    ' size
209 416 rdnzl
    ComboBoxGraph_width.Text = rGraph!graph_width
210 416 rdnzl
    ComboBoxGraph_height.Text = rGraph!graph_height
211 416 rdnzl
212 416 rdnzl
    CheckBoxLogarithmicscale.Value = rGraph!logarithmic_scale
213 433 rdnzl
    PopulateGroups()
214 416 rdnzl
215 416 rdnzl
  ENDIF
216 416 rdnzl
217 416 rdnzl
END
218 416 rdnzl
219 416 rdnzl
PUBLIC SUB Load_graph_data(graph_id AS Integer, ds_id AS Integer) AS Boolean
220 416 rdnzl
221 416 rdnzl
  DIM rGraph_data AS Result
222 416 rdnzl
223 416 rdnzl
  TRY rGraph_data = Main.hDB.Exec("SELECT * FROM graph_data WHERE graph_id = &1 AND ds_id = &2", graph_id, ds_id)
224 416 rdnzl
225 416 rdnzl
  IF rGraph_data.Count <> 0 THEN
226 416 rdnzl
    ComboBoxGraphList.Tag = rGraph_data!id
227 416 rdnzl
228 416 rdnzl
    ' checkbox min/max/last/avg
229 416 rdnzl
    TextBoxGraph_name.Text = rGraph_data!graph_name
230 416 rdnzl
    ComboBoxGraph_device.Text = rGraph_data!graph_devicename
231 416 rdnzl
    ComboBoxGraph_ds.Text = rGraph_data!graph_rrddsname
232 416 rdnzl
    CheckBoxGraph_graphvalue_min.Value = rGraph_data!graph_value_min
233 416 rdnzl
    CheckBoxGraph_graphvalue_max.Value = rGraph_data!graph_value_max
234 416 rdnzl
    CheckBoxGraph_graphvalue_avg.Value = rGraph_data!graph_value_avg
235 416 rdnzl
    ColorButtonGraph_graphvalue_min_color.Value = rGraph_data!graph_value_min_color
236 416 rdnzl
    ColorButtonGraph_graphvalue_max_color.Value = rGraph_data!graph_value_max_color
237 416 rdnzl
    ColorButtonGraph_graphvalue_avg_color.Value = rGraph_data!graph_value_avg_color
238 416 rdnzl
    ComboBoxGraph_type.Text = rGraph_data!graph_line_type
239 416 rdnzl
    CheckBoxGraph_min.Value = rGraph_data!graph_min
240 416 rdnzl
    CheckBoxGraph_max.Value = rGraph_data!graph_max
241 416 rdnzl
    CheckBoxGraph_avg.Value = rGraph_data!graph_avg
242 416 rdnzl
    CheckBoxGraph_last.Value = rGraph_data!graph_last
243 416 rdnzl
    ColorButtonGraph.Value = rGraph_data!graph_color
244 416 rdnzl
    CheckBoxTrend.Value = rGraph_data!graph_trend
245 416 rdnzl
    SpinBoxShift.Value = rGraph_data!graph_timeshift_value
246 416 rdnzl
    CheckBoxShift.Value = rGraph_data!graph_timeshift
247 416 rdnzl
    SpinBoxTrend.Value = rGraph_data!graph_trend_value
248 416 rdnzl
    ' operation
249 416 rdnzl
    CheckBoxOperation.Value = rGraph_data!graph_operation
250 416 rdnzl
    SpinBoxOperation.Value = rGraph_data!graph_operation_value
251 416 rdnzl
    ComboBoxOperation.Text = rGraph_data!graph_operation_operator
252 416 rdnzl
  ELSE
253 416 rdnzl
    Reset_graph_data()
254 416 rdnzl
    FrameGraph_data.Enabled = TRUE
255 416 rdnzl
    FramePreview.Enabled = TRUE
256 416 rdnzl
  ENDIF
257 416 rdnzl
258 416 rdnzl
END
259 416 rdnzl
260 416 rdnzl
PUBLIC SUB ButtonGraphClose_Click()
261 416 rdnzl
262 416 rdnzl
  ME.Close
263 416 rdnzl
264 416 rdnzl
END
265 416 rdnzl
266 416 rdnzl
PUBLIC SUB CheckMissingGraphName() AS Boolean
267 416 rdnzl
268 416 rdnzl
  IF ComboBoxGraph_name.Text = " " THEN
269 416 rdnzl
    ComboBoxGraph_name.SetFocus
270 433 rdnzl
    Balloon("Graph name missing!", ComboBoxGraph_name,, 50, 10)
271 416 rdnzl
    RETURN FALSE
272 416 rdnzl
  ELSE
273 416 rdnzl
    RETURN TRUE
274 416 rdnzl
  ENDIF
275 416 rdnzl
276 416 rdnzl
END
277 416 rdnzl
278 416 rdnzl
PUBLIC SUB Populate_device_list()
279 416 rdnzl
280 416 rdnzl
  DIM rDevice AS Result
281 416 rdnzl
282 416 rdnzl
  ComboBoxGraph_device.Clear
283 416 rdnzl
  ComboBoxGraph_device.Add(" ")
284 433 rdnzl
  TRY rDevice = Main.hDB.Exec("SELECT name FROM devices WHERE rrd IS TRUE ORDER BY name")
285 416 rdnzl
  IF rDevice THEN
286 416 rdnzl
    FOR EACH rDevice
287 416 rdnzl
      ComboBoxGraph_device.Add(rDevice!name)
288 416 rdnzl
    NEXT
289 416 rdnzl
  ENDIF
290 416 rdnzl
291 416 rdnzl
END
292 416 rdnzl
293 416 rdnzl
PUBLIC SUB ComboBoxGraph_device_GotFocus()
294 416 rdnzl
295 416 rdnzl
  IF ComboBoxGraph_device.Count = 0 AND CheckMissingGraphName() = TRUE THEN
296 416 rdnzl
    Populate_device_list()
297 416 rdnzl
  ENDIF
298 416 rdnzl
299 416 rdnzl
END
300 416 rdnzl
301 416 rdnzl
PUBLIC SUB ComboBoxGraphList_Change()
302 416 rdnzl
303 416 rdnzl
  IF ComboBoxGraph_name.Tag <> "" THEN
304 416 rdnzl
    Load_graph_data(ComboBoxGraph_name.Tag, ComboBoxGraphList.Text)
305 416 rdnzl
  ENDIF
306 416 rdnzl
307 416 rdnzl
END
308 416 rdnzl
309 416 rdnzl
PUBLIC SUB ButtonGraphPreview_Click()
310 416 rdnzl
311 416 rdnzl
  DIM sRRDCmd AS String
312 416 rdnzl
  DIM sTempFile AS String = Temp()
313 416 rdnzl
314 416 rdnzl
  IF ComboBoxGraph_name.Tag THEN
315 433 rdnzl
    sRRDCmd = RRDTool.GenerateGraph(ComboBoxGraph_name.Tag, sTempFile, ComboBoxRange_Preview.Text)
316 433 rdnzl
    SHELL sRRDCmd WAIT
317 416 rdnzl
    IF Main.bRRDToolDebug THEN Main.WriteDebugLog("[Graph Editor] " & sRRDCmd)
318 416 rdnzl
    Display_Graph_Preview(sTempFile)
319 416 rdnzl
  ENDIF
320 416 rdnzl
321 416 rdnzl
END
322 416 rdnzl
323 416 rdnzl
PUBLIC SUB ButtonGraphPreviewUpdate(sRange AS String)
324 416 rdnzl
325 416 rdnzl
  DIM sRRDCmd AS String
326 416 rdnzl
  DIM sTempFile AS String = Temp()
327 416 rdnzl
328 416 rdnzl
  IF ComboBoxGraph_name.Tag THEN
329 433 rdnzl
    sRRDCmd = RRDTool.GenerateGraph(ComboBoxGraph_name.Tag, sTempFile, sRange)
330 433 rdnzl
    SHELL sRRDCmd WAIT
331 416 rdnzl
    IF Main.bRRDToolDebug THEN Main.WriteDebugLog("[Graph Editor] " & sRRDCmd)
332 416 rdnzl
    Display_Graph_Preview(sTempFile, TRUE)
333 416 rdnzl
  ENDIF
334 416 rdnzl
335 416 rdnzl
END
336 416 rdnzl
337 416 rdnzl
PUBLIC SUB Display_Graph_Preview(sFile AS String, OPTIONAL bUpdate AS Boolean)
338 416 rdnzl
339 416 rdnzl
  DIM pGraph AS Picture
340 416 rdnzl
341 416 rdnzl
  TRY pGraph = Picture.Load(sFile)
342 416 rdnzl
  IF pGraph THEN
343 416 rdnzl
    FGraphsPreview.PictureBoxGraphPreview.Picture = pGraph
344 416 rdnzl
    IF bUpdate THEN RETURN
345 416 rdnzl
    FGraphsPreview.Height = pGraph.Height + 80
346 416 rdnzl
    IF pGraph.Width >= 415 THEN
347 416 rdnzl
      FGraphsPreview.Width = pGraph.Width + 15
348 416 rdnzl
    ELSE
349 416 rdnzl
      FGraphsPreview.Width = 415
350 416 rdnzl
    END IF
351 416 rdnzl
    FGraphsPreview.X = (Desktop.W / 2) - (pGraph.Width / 2)
352 416 rdnzl
    FGraphsPreview.Y = (Desktop.H / 2) - (pGraph.Height / 2)
353 416 rdnzl
    FGraphsPreview.PictureBoxGraphPreview.H = pGraph.Height - 1
354 416 rdnzl
    FGraphsPreview.PictureBoxGraphPreview.W = pGraph.Width - 1
355 416 rdnzl
    FGraphsPreview.PictureBoxGraphPreview.Visible = TRUE
356 416 rdnzl
    FGraphsPreview.Show
357 416 rdnzl
  ENDIF
358 416 rdnzl
359 416 rdnzl
END
360 416 rdnzl
361 416 rdnzl
PUBLIC SUB DeleteGraphData_Button_Click()
362 416 rdnzl
363 416 rdnzl
  DIM rGraph AS Result
364 416 rdnzl
365 433 rdnzl
  TRY rGraph = Main.hDB.Exec("DELETE FROM graph_data WHERE id = &1", ComboBoxGraphList.Tag)
366 416 rdnzl
  IF rGraph THEN
367 416 rdnzl
    ComboBoxGraphList.Tag = ""
368 416 rdnzl
    Main.WriteDebugLog("[Graph Editor] DS deleted")
369 416 rdnzl
    Load_graph_data(ComboBoxGraph_name.Tag, ComboBoxGraphList.Text)
370 416 rdnzl
  ENDIF
371 416 rdnzl
372 416 rdnzl
END
373 416 rdnzl
374 416 rdnzl
PUBLIC SUB SaveGraphData_Button_Click()
375 416 rdnzl
376 416 rdnzl
  DIM rGraph AS Result
377 416 rdnzl
378 416 rdnzl
  IF ComboBoxGraph_device.Text AND ComboBoxGraph_ds.Text THEN
379 416 rdnzl
    IF ComboBoxGraphList.Tag THEN
380 433 rdnzl
      TRY rGraph = Main.hDB.Exec("UPDATE graph_data SET graph_name = &1, graph_max = &2, graph_min = &3, graph_last = &4, graph_avg = &5, graph_value_max = &6, graph_value_avg = &7, graph_value_min = &8, graph_value_max_color = &9, graph_value_avg_color = &10, graph_value_min_color = &11, graph_line_type = &12, graph_rrddsname = &13, graph_color = &14, graph_trend = &15, graph_trend_value = &16, graph_timeshift = &17, graph_timeshift_value = &18, graph_operation = &19, graph_operation_operator = &20, graph_operation_value = &21, graph_devicename = &22 WHERE id = &23", TextBoxGraph_name.Text, Abs(CheckBoxGraph_max.Value), Abs(CheckBoxGraph_min.Value), Abs(CheckBoxGraph_last.Value), Abs(CheckBoxGraph_avg.Value), Abs(CheckBoxGraph_graphvalue_max.Value), Abs(CheckBoxGraph_graphvalue_avg.Value), Abs(CheckBoxGraph_graphvalue_min.Value), ColorButtonGraph_graphvalue_max_color.Value, ColorButtonGraph_graphvalue_avg_color.Value, ColorButtonGraph_graphvalue_min_color.Value, ComboBoxGraph_type.Text, ComboBoxGraph_ds.Text, ColorButtonGraph.Value, Abs(CheckBoxTrend.Value), SpinBoxTrend.Value, Abs(CheckBoxShift.Value), SpinBoxShift.Value, Abs(CheckBoxOperation.Value), ComboBoxOperation.Text, SpinBoxOperation.Value, ComboBoxGraph_device.Text, ComboBoxGraphList.Tag)
381 416 rdnzl
    ELSE IF TextBoxGraph_name.Text THEN
382 416 rdnzl
      TRY rGraph = Main.hDB.Exec("INSERT INTO graph_data (graph_id, graph_name, graph_max, graph_min, graph_last, graph_avg, graph_value_max, graph_value_avg, graph_value_min, graph_value_max_color, graph_value_avg_color, graph_value_min_color, graph_line_type, graph_rrddsname, graph_color, graph_trend, graph_trend_value, graph_timeshift, graph_timeshift_value, graph_operation, graph_operation_operator, graph_operation_value, graph_devicename, ds_id) values (&1,&2,&3,&4,&5,&6,&7,&8,&9,&10,&11,&12,&13,&14,&15,&16,&17,&18,&19,&20,&21,&22,&23,&24)", ComboBoxGraph_name.Tag, TextBoxGraph_name.Text, Abs(CheckBoxGraph_max.Value), Abs(CheckBoxGraph_min.Value), Abs(CheckBoxGraph_last.Value), Abs(CheckBoxGraph_avg.Value), Abs(CheckBoxGraph_graphvalue_max.Value), Abs(CheckBoxGraph_graphvalue_avg.Value), Abs(CheckBoxGraph_graphvalue_min.Value), ColorButtonGraph_graphvalue_max_color.Value, ColorButtonGraph_graphvalue_avg_color.Value, ColorButtonGraph_graphvalue_min_color.Value, ComboBoxGraph_type.Text, ComboBoxGraph_ds.Text, ColorButtonGraph.Value, Abs(CheckBoxTrend.Value), SpinBoxTrend.Value, Abs(CheckBoxShift.Value), SpinBoxShift.Value, Abs(CheckBoxOperation.Value), ComboBoxOperation.Text, SpinBoxOperation.Value, ComboBoxGraph_device.Text, ComboBoxGraphList.Text)
383 416 rdnzl
      Load_graph_data(ComboBoxGraph_name.Tag, ComboBoxGraphList.Text)
384 416 rdnzl
    ENDIF
385 416 rdnzl
  ELSE
386 416 rdnzl
    ComboBoxGraph_device.SetFocus
387 416 rdnzl
    Balloon.Warning("Device/DS Missing", ComboBoxGraph_device)
388 416 rdnzl
  ENDIF
389 416 rdnzl
390 416 rdnzl
END
391 416 rdnzl
392 433 rdnzl
PUBLIC SUB ButtonGraphSave2_Click()
393 433 rdnzl
394 439 rdnzl
  IF Len(TextBoxGraph_name.Text) THEN SaveGraphData_Button_Click()
395 433 rdnzl
  ButtonGraphSave_Click()
396 433 rdnzl
397 433 rdnzl
END
398 433 rdnzl
399 416 rdnzl
PUBLIC SUB ButtonGraphSave_Click()
400 416 rdnzl
401 416 rdnzl
  DIM rGraph AS Result
402 416 rdnzl
403 416 rdnzl
  IF ComboBoxGraph_name.Tag THEN
404 433 rdnzl
    TRY rGraph = Main.hDB.Exec("UPDATE graphs SET name = &1, enabled = &2, comments = &3, graph_title = &4, graph_height = &5, graph_width = &6, color_background = &7, color_canvas = &8, color_shadea = &9, color_shadeb = &10, color_font = &11, color_grid = &12, color_majorgrid = &13, color_frame = &14, color_axis = &15, color_arrow = &16, unit = &17, logarithmic_scale = &18, date = &19, grid_type = &20, groups = &21 WHERE id = &22", ComboBoxGraph_name.Text, Abs(CheckBoxGraph_enabled.Value), TGraphComment.Text, Graph_title.Text, ComboBoxGraph_height.Text, ComboBoxGraph_width.Text, ColorButtonGraph_background.Value, ColorButtonGraph_canvas.Value, ColorButtonGraph_shadea.Value, ColorButtonGraph_shadeb.Value, ColorButtonGraph_font.Value, ColorButtonGraph_grid.Value, ColorButtonGraph_majorgrid.Value, ColorButtonGraph_frame.Value, ColorButtonGraph_axis.Value, ColorButtonGraph_arrow.Value, Graph_unit.Text, Abs(CheckBoxLogarithmicscale.Value), CheckBoxDate.Value, ComboBoxGraph_gridtype.Text, GetGroups(), ComboBoxGraph_name.Tag)
405 418 rdnzl
  ELSE IF ComboBoxGraph_name.Text <> " " THEN
406 433 rdnzl
    TRY rGraph = Main.hDB.Exec("INSERT INTO graphs (name, enabled, comments, graph_title, graph_height, graph_width, color_background, color_canvas, color_shadea, color_shadeb, color_font, color_grid, color_majorgrid, color_frame, color_axis, color_arrow, logarithmic_scale, date, unit, grid_type, groups) values (&1,&2,&3,&4,&5,&6,&7,&8,&9,&10,&11,&12,&13,&14,&15,&16,&17,&18,&19,&20,&21)", ComboBoxGraph_name.Text, Abs(CheckBoxGraph_enabled.Value), TGraphComment.Text, Graph_title.Text, ComboBoxGraph_height.Text, ComboBoxGraph_width.Text, ColorButtonGraph_background.Value, ColorButtonGraph_canvas.Value, ColorButtonGraph_shadea.Value, ColorButtonGraph_shadeb.Value, ColorButtonGraph_font.Value, ColorButtonGraph_grid.Value, ColorButtonGraph_majorgrid.Value, ColorButtonGraph_frame.Value, ColorButtonGraph_axis.Value, ColorButtonGraph_arrow.Value, Abs(CheckBoxLogarithmicscale.Value), Abs(CheckBoxDate.Value), Graph_unit.Text, ComboBoxGraph_gridtype.Text, GetGroups())
407 416 rdnzl
    Graph_list()
408 416 rdnzl
    ComboBoxGraph_name.Select(ComboBoxGraph_name.Count, 1)
409 416 rdnzl
    Load_graph(ComboBoxGraph_name.Text)
410 416 rdnzl
  ENDIF
411 416 rdnzl
412 416 rdnzl
END
413 416 rdnzl
414 416 rdnzl
PUBLIC SUB ButtonGraphDelete_Click()
415 416 rdnzl
416 416 rdnzl
  DIM rGraph AS Result
417 416 rdnzl
418 416 rdnzl
  IF ComboBoxGraph_name.Tag THEN
419 416 rdnzl
    TRY rGraph = Main.hDB.Exec("DELETE from graph_data where graph_id = &1", ComboBoxGraph_name.Tag)
420 416 rdnzl
    TRY rGraph = Main.hDB.Exec("DELETE from graphs where id = &1", ComboBoxGraph_name.Tag)
421 416 rdnzl
    Reset_graph()
422 416 rdnzl
    Reset_graph_data()
423 416 rdnzl
    Graph_list()
424 416 rdnzl
  ENDIF
425 416 rdnzl
426 416 rdnzl
END
427 433 rdnzl
428 433 rdnzl
PUBLIC SUB PopulateGroups()
429 433 rdnzl
430 433 rdnzl
  DIM rResultGroups AS Result
431 433 rdnzl
432 433 rdnzl
  lvGroupAvail.Clear
433 433 rdnzl
  ' fill available groups list
434 433 rdnzl
  rResultGroups = Main.hDB.Exec("SELECT * FROM groups ORDER BY name")
435 433 rdnzl
  IF rResultGroups THEN
436 433 rdnzl
    IF rResultGroups.Count THEN
437 433 rdnzl
      FOR EACH rResultGroups
438 433 rdnzl
        lvGroupAvail.Add(rResultGroups!name, rResultGroups!name)
439 433 rdnzl
      NEXT
440 433 rdnzl
    ELSE
441 433 rdnzl
      Message(("No groups found!"))
442 433 rdnzl
    ENDIF
443 433 rdnzl
  ELSE
444 433 rdnzl
    Message(("No groups database table found!"))
445 433 rdnzl
  ENDIF
446 433 rdnzl
447 433 rdnzl
END
448 433 rdnzl
449 433 rdnzl
PUBLIC SUB AssignGroups()
450 433 rdnzl
451 433 rdnzl
  DIM rResultGroups AS Result
452 433 rdnzl
453 433 rdnzl
  lvGroupActive.Clear
454 433 rdnzl
  ' fill available groups list
455 433 rdnzl
  rResultGroups = Main.hDB.Exec("SELECT * FROM groups")
456 433 rdnzl
  IF (rResultGroups.Count >= 1) THEN
457 433 rdnzl
    FOR EACH rResultGroups
458 433 rdnzl
      IF InStr("|" & rGraph!groups & "|", "|" & rResultGroups!name & "|") THEN
459 433 rdnzl
        lvGroupActive.Add(rResultGroups!name, rResultGroups!name)
460 433 rdnzl
        lvGroupAvail.Remove(rResultGroups!name)
461 433 rdnzl
      ENDIF
462 433 rdnzl
    NEXT
463 433 rdnzl
  ELSE
464 433 rdnzl
    Message(("No groups found!"))
465 433 rdnzl
  ENDIF
466 433 rdnzl
467 433 rdnzl
END
468 433 rdnzl
469 433 rdnzl
PUBLIC SUB lvGroupAvail_Click()
470 433 rdnzl
471 433 rdnzl
  lvGroupActive.Add(lvGroupAvail.Item.Key, lvGroupAvail.Item.Key)
472 433 rdnzl
  lvGroupAvail.Remove(lvGroupAvail.Item.Key)
473 433 rdnzl
474 433 rdnzl
END
475 433 rdnzl
476 433 rdnzl
PUBLIC SUB lvGroupActive_Click()
477 433 rdnzl
478 433 rdnzl
  lvGroupAvail.Add(lvGroupActive.Item.Key, lvGroupActive.Item.Key)
479 433 rdnzl
  lvGroupActive.Remove(lvGroupActive.Item.Key)
480 433 rdnzl
481 433 rdnzl
END
482 433 rdnzl
483 433 rdnzl
PUBLIC SUB GetGroups() AS String
484 433 rdnzl
485 433 rdnzl
  DIM iCount AS Integer
486 433 rdnzl
  DIM sGroups AS String = "|"
487 433 rdnzl
488 433 rdnzl
  lvGroupActive.MoveFirst
489 433 rdnzl
490 433 rdnzl
  FOR iCount = 1 TO lvGroupActive.Count
491 433 rdnzl
    sGroups = sGroups & lvGroupActive.Item.Text & "|"
492 433 rdnzl
    lvGroupActive.MoveNext
493 433 rdnzl
  NEXT
494 433 rdnzl
495 433 rdnzl
  RETURN sGroups
496 433 rdnzl
497 433 rdnzl
END