Bläddra i källkod

The Sqlite3CC sample has enough functionality to be usefull.

mingodad 13 år sedan
förälder
incheckning
8c753c0ad2
3 ändrade filer med 102 tillägg och 37 borttagningar
  1. 31 17
      SquiLu-ourbiz/sqlite3-cc-gui.fl
  2. 15 16
      SquiLu-ourbiz/sqlite3-cc-gui.nut
  3. 56 4
      SquiLu-ourbiz/sqlite3-cc.nut

+ 31 - 17
SquiLu-ourbiz/sqlite3-cc-gui.fl

@@ -90,11 +90,11 @@ widget_class Sqlite3cc_Window {
   Fl_Tile tile {open
     xywh {0 25 780 495}
   } {
-    Fl_Table grid_tables {
-      dirty_name grid_tables open selected
-      xywh {5 25 160 280} labelsize 16
+    Fl_Browser grid_tables {
+      dirty_name grid_tables
+      xywh {5 25 160 280} labelsize 16 textsize 16
       class Fl_Data_Table
-    } {}
+    }
     Fl_Group {} {open
       xywh {165 25 615 280}
     } {
@@ -105,31 +105,45 @@ widget_class Sqlite3cc_Window {
           xywh {165 25 615 35} box DOWN_FRAME labelsize 16
         } {
           Fl_Input iMaxRows {
-            label {Max Rows}
+            label {Max Rows} selected
             xywh {265 30 49 25} type Int labelsize 16 textsize 16
+            code0 {o->value("50");}
           }
           Fl_Choice option_query {
             label Query open
             xywh {370 30 120 25} down_box BORDER_BOX labelsize 16 textsize 16
-          } {}
+          } {
+            MenuItem {} {
+              label select
+              xywh {0 0 36 21}
+            }
+            MenuItem {} {
+              label insert
+              xywh {0 0 36 21}
+            }
+            MenuItem {} {
+              label update
+              xywh {0 0 36 21}
+            }
+            MenuItem {} {
+              label delete
+              xywh {0 0 36 21}
+            }
+          }
           Fl_Button btnCreateQuery {
             label {@->}
-            callback {dispatch_func(create_sql_query, self)}
             xywh {500 30 25 25} labelsize 16
           }
           Fl_Button btnExecute {
             label Execute
-            callback {dispatch_func(execute_sql, self)}
             xywh {535 30 75 25} labelsize 16
           }
           Fl_Button btnLoad {
             label Load
-            callback {dispatch_func(load_sql_from_file, self)}
             xywh {620 30 70 25} labelsize 16
           }
           Fl_Button btnSave {
             label Save
-            callback {dispatch_func(save_sql_to_file, self)}
             xywh {700 30 70 25} labelsize 16
           }
         }
@@ -167,18 +181,18 @@ widget_class Sqlite3cc_Window {
     Fl_Group group_bottom {open
       xywh {0 305 780 215} box DOWN_BOX
     } {
-      Fl_Tabs tabView {
+      Fl_Tabs tabView {open
         xywh {0 305 780 215} labelsize 16 resizable
       } {
         Fl_Group groupData {
           label Data open
-          xywh {0 333 780 187} labelsize 16 resizable
+          xywh {0 333 780 187} labelsize 16 hide resizable
         } {
-          Fl_Table grid_data {
-            dirty_name grid_data open
-            xywh {0 333 780 187}
+          Fl_Browser grid_data {
+            dirty_name grid_data
+            xywh {0 333 780 187} labelsize 16 textsize 16
             class Fl_Data_Table
-          } {}
+          }
         }
         Fl_Group viewFields {
           label Fields open
@@ -200,7 +214,7 @@ widget_class Sqlite3cc_Window {
         }
         Fl_Group viewTriggers {
           label Triggers open
-          xywh {0 333 780 187} labelsize 16 hide
+          xywh {0 333 780 187} labelsize 16
         } {
           Fl_Browser gridTriggers {
             xywh {0 333 780 187} labelsize 16 textsize 16

+ 15 - 16
SquiLu-ourbiz/sqlite3-cc-gui.nut

@@ -86,9 +86,9 @@ class Sqlite3cc_Window extends Fl_Double_Window {
         {
           local o = Fl_Data_Table(5, 25, 160, 280);
           grid_tables = o;
-	  o.label(_tr("Database"));
-	  o.labelsize(16);
-	  o.textsize(16);
+          o.textsize(16);
+          o.labelsize(16);
+          o.end();
         }
         {
           local o = Fl_Group(165, 25, 615, 280);
@@ -111,6 +111,7 @@ class Sqlite3cc_Window extends Fl_Double_Window {
                       iMaxRows = o;
                       o.textsize(16);
                       o.labelsize(16);
+                      o->value("50");
                     }
                     {
                       local o = Fl_Choice(370, 30, 120, 25, _tr("Query"));
@@ -118,38 +119,32 @@ class Sqlite3cc_Window extends Fl_Double_Window {
                       o.textsize(16);
                       o.labelsize(16);
                       o.down_box(FL_BORDER_BOX);
+                      {
+                        o.add(_tr("select"), 0);
+                        o.add(_tr("insert"), 0);
+                        o.add(_tr("update"), 0);
+                        o.add(_tr("delete"), 0);
+                      }
                     }
                     {
                       local o = Fl_Button(500, 30, 25, 25, _tr("@->"));
                       btnCreateQuery = o;
                       o.labelsize(16);
-                      o.callback(function(sender, udata){
-                        dispatch_func(create_sql_query, self)
-                      });
                     }
                     {
                       local o = Fl_Button(535, 30, 75, 25, _tr("Execute"));
                       btnExecute = o;
                       o.labelsize(16);
-                      o.callback(function(sender, udata){
-                        dispatch_func(execute_sql, self)
-                      });
                     }
                     {
                       local o = Fl_Button(620, 30, 70, 25, _tr("Load"));
                       btnLoad = o;
                       o.labelsize(16);
-                      o.callback(function(sender, udata){
-                        dispatch_func(load_sql_from_file, self)
-                      });
                     }
                     {
                       local o = Fl_Button(700, 30, 70, 25, _tr("Save"));
                       btnSave = o;
                       o.labelsize(16);
-                      o.callback(function(sender, udata){
-                        dispatch_func(save_sql_to_file, self)
-                      });
                     }
                   }
                   o.end();
@@ -237,6 +232,9 @@ class Sqlite3cc_Window extends Fl_Double_Window {
                     {
                       local o = Fl_Data_Table(0, 333, 780, 187);
                       grid_data = o;
+                      o.textsize(16);
+                      o.labelsize(16);
+                      o.end();
                     }
                   }
                   o.end();
@@ -380,7 +378,7 @@ class SquiLuEditWindow extends Fl_Double_Window {
   btnRun = null;
   output_editor = null;
   
-  constructor(px=286, py=113, pw=569, ph=540, pl=_tr("SquiLu Edit")){
+  constructor(px=286, py=113, pw=565, ph=540, pl=_tr("SquiLu Edit")){
     base.constructor(px, py, pw, ph, pl);
     // Create member functions and widgets
     {
@@ -427,3 +425,4 @@ class SquiLuEditWindow extends Fl_Double_Window {
     }
   }
 }
+

+ 56 - 4
SquiLu-ourbiz/sqlite3-cc.nut

@@ -20,6 +20,7 @@ class Fl_Data_Table extends Flv_Data_Table {
 		_cols_info = [];
 		_data = [];
 		_forPrint = false;
+		has_scrollbar(FLVS_BOTH);
 	}
 
 	function for_print(bval){_forPrint = bval; }
@@ -169,7 +170,7 @@ class Fl_Data_Table extends Flv_Data_Table {
 		local rc = base.handle(event);
 		return rc;
 	}
-	function row_selected(ev){ if(_call_this) _call_this.row_selected(ev);}
+	function row_selected(ev){ if(_call_this) _call_this.row_selected(this, ev);}
 	function set_cols(mycols, size_absolute=false){
 		_cols_info.clear();
 		for(local i=0, max_cols=mycols.size(); i < max_cols; ++i){
@@ -191,6 +192,10 @@ class Fl_Data_Table extends Flv_Data_Table {
 		col_info.format <- (ci_size > curr_ci++) ? ci[curr_ci-1][0] : '\0';
 		col_info.color <- (ci_size > curr_ci++) ? ci[curr_ci-1].tointeger() : 0;
 		col_info.bgcolor <- (ci_size > curr_ci++) ? ci[curr_ci-1].tointeger() : 0;
+		if(ci_size == 1) {
+			col_info.colname = str;
+			col_info.header = str;
+		}
 	}
 	function calc_cols(size_absolute=false){
 		calc_cols_width(size_absolute);
@@ -279,6 +284,48 @@ class Sqlite3CC extends Sqlite3cc_Window {
 	constructor(){
 		base.constructor();
 		menuBar.callback(menuBar_cb);
+		btnExecute.callback(btnExecute_cb);
+		btnCreateQuery.callback(btnCreateQuery_cb);
+		grid_tables._call_this = this;
+	}
+	
+	function row_selected(sender, ev){
+		if(sender == grid_tables, ev){
+			if(ev == Fl_Data_Table_Events.e_update){
+				local tbl = grid_tables.get_value(grid_tables.row(), 1);
+				local sql = "select * from " + tbl;
+				local limit = iMaxRows.value();
+				if(limit && limit.len()) sql += " limit " + limit;
+				get_records_by_sql(grid_data, sql, true);
+			}
+		}
+	}
+  
+	function btnExecute_cb(sender, udata){
+		this = sender->window();
+		local sql = edit_queries->value();
+		if(sql && sql.len()) get_records_by_sql(grid_data, sql, true);
+	}
+  
+	function btnCreateQuery_cb(sender, udata){
+		this = sender->window();
+		if(db){
+			local tbl = grid_tables.get_value(grid_tables.row(), 1);
+			local sql = option_query.text();
+			local stmt = db.prepare("select * from " + tbl);
+			local fields = stmt.colsAsArray();
+			local str_fields =  fields.concat(", ");
+			stmt.finalize();
+			if(sql == "select") sql = format("select %s\nfrom %s", str_fields, tbl);
+			else if(sql == "insert") sql = format("insert into %s(%s)\nvalues(%s)", tbl, str_fields, str_fields);
+			else if(sql == "update") {
+				str_fields = fields.concat("=?, ");
+				sql = format("update %s set %s=?\nwhere id=?", tbl, str_fields);
+			}
+			else if(sql == "delete") sql = format("delete from %s where id=?", tbl);
+			else return;
+			edit_queries->value(sql);
+		}
 	}
   
 	function set_label_dbf(dbf){
@@ -288,10 +335,11 @@ class Sqlite3CC extends Sqlite3cc_Window {
 		label(label_title);
 	}
 
-	function get_records_by_sql(grid, sql , named){
+	function get_records_by_sql(grid, sql , named=false){
+		local cursor_wait = fl_cursor_wait();
 		local stmt = db.prepare(sql);
-		local rec_list = stmt.asArrayOfArrays();
-		rec_list.insert(0, stmt.colsAsArray());
+		local rec_list = stmt.asArrayOfArrays(SQLite3Stmt.WITH_COL_NAMES | 
+			SQLite3Stmt.AS_STRING_ALWAYS | SQLite3Stmt.NULL_AS_EMPTY_STR);
 		grid.set_new_data(rec_list);
 	}
 
@@ -363,6 +411,10 @@ class Sqlite3CC extends Sqlite3cc_Window {
 	}
 }
 
+Fl.scheme("gtk+");
+Fl.visual(FL_RGB);
+//allow arrow keys navigation
+Fl.option(Fl.OPTION_ARROW_FOCUS, true);
 
 local win = new Sqlite3CC();
 //local win = new SalesTaxRatesEditWindow();