Install new 0.81 pgaccess release.
This commit is contained in:
parent
2fb643758d
commit
09b187598c
@ -24,7 +24,7 @@ PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
|
||||
|
||||
|
||||
|
||||
PGACCESS 0.76 , 12 January 1998
|
||||
PGACCESS 0.81 1 March 1998
|
||||
================================
|
||||
I dedicate this program to my little 4 year daughter Ana-Maria and my wife
|
||||
for their understanding. I hope they will forgive me for spending so many
|
||||
@ -126,7 +126,9 @@ Reports
|
||||
- table previews, sample postscript print
|
||||
|
||||
Forms
|
||||
- open user defined forms, form design module not yet available
|
||||
- open user defined forms
|
||||
- form design module available
|
||||
- query widget qlowing access to a recordset
|
||||
|
||||
Scripts
|
||||
- define, modify and call user defined scripts
|
||||
|
104
src/bin/pgaccess/forms.html
Normal file
104
src/bin/pgaccess/forms.html
Normal file
@ -0,0 +1,104 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
|
||||
<HTML>
|
||||
<HEAD>
|
||||
<TITLE></TITLE>
|
||||
<META NAME="GENERATOR" CONTENT="Mozilla/3.04Gold (X11; I; Linux 2.0.32 i586) [Netscape]">
|
||||
</HEAD>
|
||||
<BODY TEXT="#000000" BGCOLOR="#FFEBCD" LINK="#0000EF" VLINK="#51188E" ALINK="#FF0000">
|
||||
|
||||
<H1>FORMS</H1>
|
||||
|
||||
<P>
|
||||
<HR WIDTH="100%"></P>
|
||||
|
||||
<P>This version (0.81) of PgAccess introduce the visual form builder.</P>
|
||||
|
||||
<P>For the moment, it has only some basic widgets : labels, entries, buttons
|
||||
, listboxes , checkboxes and radiobuttons.</P>
|
||||
|
||||
<P>Also there is a query widget that allows you yo have access to a query
|
||||
results.</P>
|
||||
|
||||
<P>In a manner very similar with Visual Tcl or Visual Basic, the user must
|
||||
select a widget from the toolbar and drags on the canvas the rectangle
|
||||
that would define the widget. It can also specify some attributes in a
|
||||
separate window. Renaming, resizing items are possible modifying parameters
|
||||
in attribute window. Do not forget to press Enter in the edit field after
|
||||
changing a value in order to be accepted.</P>
|
||||
|
||||
<P>You can also move items by dragging them or delete them by pressing
|
||||
Del key.</P>
|
||||
|
||||
<P>In attribute window, there are some fields named <B><TT><FONT SIZE=+1>Command
|
||||
</FONT></TT></B>and <B><TT><FONT SIZE=+1>Variable</FONT></TT></B>.</P>
|
||||
|
||||
<P>The field <B><TT><FONT SIZE=+1>Command </FONT></TT></B>have meaning
|
||||
only for Button widgets and holds the command that will be invoked when
|
||||
the button is pressed.</P>
|
||||
|
||||
<P>The field <B><TT><FONT SIZE=+1>Variable </FONT></TT></B>have meaning
|
||||
only for EditField , Label widgets and checkboxes and it is the name of
|
||||
the global variable that will hold the value for that widget. For checkboxes
|
||||
the values are 1 or 0.</P>
|
||||
|
||||
<P>In order to make a simple test, put an entry field and set it's variable
|
||||
to <B>v1</B> and a button who's command is "set v1 whisky". Press
|
||||
the button "Test form" and click on the button. In that entry
|
||||
should appear whisky. <BR>
|
||||
Another test is defining in Script module a script called "My first
|
||||
script" having the following commands:<BR>
|
||||
<TT><FONT SIZE=+1>tk_messageBox -title Warning -message "This is my
|
||||
first message!"<BR>
|
||||
</FONT></TT>and then define a button who's command is <B><TT><FONT SIZE=+1>execute_script
|
||||
"My first script"</FONT></TT></B>.</P>
|
||||
|
||||
<H2>Database manipulation</H2>
|
||||
|
||||
<P>Let's presume that our form have the internal name <B><TT>mf </TT></B>(my
|
||||
form). He wil be referred inside the Tcl/Tk source as <B><TT>.mf<BR>
|
||||
</TT></B>If you want to close the form in run-time you have to issue the
|
||||
command <B><TT>destroy .mf</TT></B></P>
|
||||
|
||||
<P>Also, any widget will have the name prefixed by <B><TT>.mf </TT></B> We
|
||||
will have <B><TT>.mf.button1</TT></B> or <B><TT>.mf.listbox1</TT></B> .</P>
|
||||
|
||||
<P>We can name the query widget <B><TT>qry</TT></B> for example. The complete
|
||||
name will be <B><TT>.mf.qry</TT></B> then.<BR>
|
||||
The <B><TT>Command </TT></B>property of the query widget must contain the
|
||||
SQL command that will be executed.<BR>
|
||||
When the form will be in run-time, automatically you will have acces to
|
||||
the following methods :</P>
|
||||
|
||||
<P><TT>.mf.qry:execute</TT> - opens the connection and execute the query
|
||||
(returns nothing)<BR>
|
||||
<TT>.mf.qry:nrecords</TT> - returns the number of records in the selected
|
||||
query<BR>
|
||||
<TT>.mf.qry:fields</TT> - returns a list of the fields in the result set<BR>
|
||||
<TT>.mf.qry:movefirst</TT> - move the cursor to the first record in the
|
||||
recordset<BR>
|
||||
<TT>.mf.qry:movelast , .mf.qry:movenext , .mf.qry:moveprevious </TT>- moves
|
||||
the cursor <BR>
|
||||
<TT>.mf.qry:updatecontrols</TT> - update the variables inside the designed
|
||||
form that have a particular name (I'll explain later)<BR>
|
||||
<TT>.mf.qry:close</TT> - close the connection (<B><FONT COLOR="#FF0000">if
|
||||
you don't close the query result, you will loose memory</FONT></B>)</P>
|
||||
|
||||
<P>If you want to bound some controls to the fields of the recordset, you
|
||||
will have to name their associate variable like that :</P>
|
||||
|
||||
<P><TT>.mf.qry.salary</TT> to get the "salary" field , or <TT>.mf.qry.name</TT>
|
||||
to get the "name" field.</P>
|
||||
|
||||
<P>It's simple, isn't it ? It's just like a new widget that have some properties
|
||||
and methods that can be accesed.<BR>
|
||||
Also, the name convention is just like in Tcl/Tk.</P>
|
||||
|
||||
<P>
|
||||
<HR WIDTH="25%"></P>
|
||||
|
||||
<P>Please feel free to send me your oppinion at <B>teo@flex.ro</B> on forms
|
||||
designing and usage.<BR>
|
||||
</P>
|
||||
|
||||
</BODY>
|
||||
</HTML>
|
124
src/bin/pgaccess/index.html
Normal file
124
src/bin/pgaccess/index.html
Normal file
@ -0,0 +1,124 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
|
||||
<HTML>
|
||||
<HEAD>
|
||||
<TITLE>PgAccess - a Tcl/Tk PostgreSQL interface</TITLE>
|
||||
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
|
||||
<META NAME="GENERATOR" CONTENT="Mozilla/3.04Gold (X11; I; Linux 2.0.32 i586) [Netscape]">
|
||||
</HEAD>
|
||||
<BODY BGCOLOR="#FFFFFF">
|
||||
|
||||
<H1>PgAccess - a database management tool for <A HREF="http://www.postgreSQL.org">PostgreSQL</A></H1>
|
||||
|
||||
<P>
|
||||
<HR></P>
|
||||
|
||||
<P>This program is protected by the following <A HREF="copyright.html">copyright</A>
|
||||
</P>
|
||||
|
||||
<LI><A HREF="pgaccess-0.81.tar.gz">Download the last version of Pgaccess
|
||||
(press shift and click this link)</A>.</LI>
|
||||
|
||||
<P>Latest version of PgAccess is 0.81 , 1 March 1998 ! </P>
|
||||
|
||||
<CENTER><TABLE BORDER=3 CELLSPACING=0 CELLPADDING=0 WIDTH="100%" BGCOLOR="#FFB6C1" >
|
||||
<TR>
|
||||
<TD>
|
||||
<CENTER><P><BR>
|
||||
<B><FONT SIZE=+2>PgAccess can now design <A HREF="forms.html">Forms</A></FONT></B>,
|
||||
<B><FONT SIZE=+2><A HREF="pga-rad.html">Reports and Scripts</A></FONT></B></P></CENTER>
|
||||
</TD>
|
||||
</TR>
|
||||
</TABLE></CENTER>
|
||||
|
||||
<P>I think that there were some problems loading libpgtcl library. <BR>
|
||||
I invite you to read a <A HREF="index.html#libpgtcl">special section concerning
|
||||
<B>libpgtcl</B></A> </P>
|
||||
|
||||
<H3><FONT COLOR="#191970">What does PgAccess now!</FONT></H3>
|
||||
|
||||
<P>Here are some images from PgAccess windows : <A HREF="pic-pga-1.gif">Main
|
||||
window </A>, <A HREF="pic-pga-2.gif">table builder </A>, <A HREF="pic-pga-4.gif">table(query)
|
||||
view </A>, <A HREF="pic-pga-3.gif">visual query builder </A>. </P>
|
||||
|
||||
<P><B>Tables</B> <BR>
|
||||
- opening tables for viewing, max 200 records (changed by preferences menu)
|
||||
<BR>
|
||||
- column resizing, dragging the vertical grid line (better in table space
|
||||
rather than in the table header) <BR>
|
||||
- text wrap in cells - layout saved for every table <BR>
|
||||
- import/export to external files (SDF,CSV) <BR>
|
||||
- filter capabilities (enter filter like (price>3.14) <BR>
|
||||
- sort order capabilities (enter manually the sort field(s)) <BR>
|
||||
- editing in place <BR>
|
||||
- improved table generator assistant <BR>
|
||||
- improved field editing <BR>
|
||||
<B>Queries</B> <BR>
|
||||
- define , edit and stores "user defined queries" <BR>
|
||||
- store queries as views <BR>
|
||||
- execution of queries <BR>
|
||||
- viewing of select type queries result <BR>
|
||||
- query deleting and renaming <BR>
|
||||
- <B><BLINK><FONT COLOR="#FF0000">NEW !!!</FONT></BLINK></B> Visual query
|
||||
builder with drag & drop capabilities. For any of you who had installed
|
||||
the Tcl/Tk plugin for Netscape Navigator, you can see it at work <A HREF="qbtclet.html">clicking
|
||||
here</A> <BR>
|
||||
<B>Sequences</B> <BR>
|
||||
- defines sequences, delete them and inspect them <BR>
|
||||
<B>Functions</B> <BR>
|
||||
- define, inspect and delete functions in SQL language <BR>
|
||||
<B>Reports<BR>
|
||||
</B>- design and display simple reports from tables<BR>
|
||||
- fields and labels, font changing, style and size<BR>
|
||||
- saves and loads report description from database<BR>
|
||||
- show report previews, sample postscript output file<BR>
|
||||
<B>Forms<BR>
|
||||
</B>- open user defined forms<BR>
|
||||
- form design module available<BR>
|
||||
- query widget available, controls bound to query results<BR>
|
||||
- <A HREF="forms.html">click here</A> for a description of forms and how
|
||||
they can be used<BR>
|
||||
<B>Scripts<BR>
|
||||
</B>- define, modify and call user defined scripts<BR>
|
||||
Here is <A HREF="pga-rad.html">a special section concerning forms and scripts</A>
|
||||
.</P>
|
||||
|
||||
<P>On the TODO list! <BR>
|
||||
- table design (add new fields, renaming, etc.) <BR>
|
||||
<BR>
|
||||
</P>
|
||||
|
||||
<P>If you have any comment, suggestion for improvements, please feel free
|
||||
to e-mail to : <A HREF="mailto:teo@flex.ro">teo@flex.ro </A> <BR>
|
||||
</P>
|
||||
|
||||
<P><B><FONT COLOR="#FF1493"><FONT SIZE=+2>Mailing list for PgAccess </FONT></FONT></B><A HREF="maillist.html">Here
|
||||
you will find how to subscribe to this mailing list</A>.</P>
|
||||
|
||||
<P>
|
||||
<HR></P>
|
||||
|
||||
<H1>More information about libgtcl</H1>
|
||||
|
||||
<P>Also, you will need the PostgreSQL to Tcl interface library, lined as
|
||||
a Tcl/Tk 'load'-able module. It is called libpgtcl and the source is located
|
||||
in the PostgreSQL directory /src/interfaces/libpgtcl. Specifically, you
|
||||
will need a libpgtcl library that is 'load'-able from Tcl/Tk. This is technically
|
||||
different from an ordinary PostgreSQL loadable object file, because libpgtcl
|
||||
is a collection of object files. Under Linux, this is called libpgtcl.so.
|
||||
<BR>
|
||||
You can download <A HREF="libpgtcl.so">from here </A>a version already
|
||||
compiled for Linux i386 systems. Just copy libpgtcl.so into your system
|
||||
library director (/usr/lib) and go for it. One of the solutions is to remove
|
||||
from the source the line containing <B>load libpgtcl.so </B>and to load
|
||||
pgaccess.tcl not with wish, but with pgwish (or wishpg) that wish that
|
||||
was linked with libpgtcl library! </P>
|
||||
|
||||
<P>If you have installed RedHat 5.0, you should get the last distribution
|
||||
kit of postgreSQL and compile it from scratch. RedHat 5.0 is using some
|
||||
new versions of libraries and you have to compile and install again at
|
||||
least <B>libpq </B>and <B><TT>libpgtcl </TT></B>libraries.</P>
|
||||
|
||||
<P>However, the application should work without problems! </P>
|
||||
|
||||
</BODY>
|
||||
</HTML>
|
43
src/bin/pgaccess/maillist.html
Normal file
43
src/bin/pgaccess/maillist.html
Normal file
@ -0,0 +1,43 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
|
||||
<HTML>
|
||||
<HEAD>
|
||||
<TITLE></TITLE>
|
||||
<META NAME="GENERATOR" CONTENT="Mozilla/3.04Gold (X11; I; Linux 2.0.32 i586) [Netscape]">
|
||||
</HEAD>
|
||||
<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000EF" VLINK="#51188E" ALINK="#FF0000">
|
||||
|
||||
<P>The mailing list for PgAccess is : <B><TT>pgsql-interfaces@postgresql.org</TT></B></P>
|
||||
|
||||
<P>If you have some questions regarding PgAccess you should mail to this
|
||||
address. I will also answer to messages addresed directly to me but it
|
||||
would be better to post your messages here because it might be possible
|
||||
to get an answer quickly from another user of PgAccess.</P>
|
||||
|
||||
<P>
|
||||
<HR WIDTH="100%"></P>
|
||||
|
||||
<P>To subscribe please send a mail message to :</P>
|
||||
|
||||
<P> <B><TT><FONT SIZE=+1>pgsql-interfaces-request@postgresql.org
|
||||
</FONT></TT></B> </P>
|
||||
|
||||
<P>having a single line in the body message : <B><TT><FONT SIZE=+1>subscribe</FONT></TT></B></P>
|
||||
|
||||
<P>In a couple of minutes , if everything is ok, you must receive something
|
||||
like that :</P>
|
||||
|
||||
<P>
|
||||
<HR WIDTH="100%"></P>
|
||||
|
||||
<P><TT>Welcome to the pgsql-interfaces mailing list!</TT></P>
|
||||
|
||||
<P><TT>Please save this message for future reference. Thank you.</TT></P>
|
||||
|
||||
<P><TT>If you ever want to remove yourself from this mailing list, you
|
||||
can send mail to <Majordomo@hub.org> with the following command in
|
||||
the body of your email message:</TT></P>
|
||||
|
||||
<P><TT>unsubscribe pgsql-interfaces yourname@yourdomain</TT></P>
|
||||
<TT></TT>
|
||||
</BODY>
|
||||
</HTML>
|
198
src/bin/pgaccess/pga-rad.html
Normal file
198
src/bin/pgaccess/pga-rad.html
Normal file
@ -0,0 +1,198 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
|
||||
<HTML>
|
||||
<HEAD>
|
||||
<TITLE></TITLE>
|
||||
<META NAME="GENERATOR" CONTENT="Mozilla/3.04Gold (X11; I; Linux 2.0.32 i586) [Netscape]">
|
||||
</HEAD>
|
||||
<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000EF" VLINK="#51188E" ALINK="#FF0000">
|
||||
|
||||
<H1>PgAccess - Scripts and Forms
|
||||
<HR WIDTH="100%"></H1>
|
||||
|
||||
<P>Beginning with 0.70 version, I have introduced in PgAccess two new modules
|
||||
for operating with scripts and forms.</P>
|
||||
|
||||
<P> This would give to PgAccess the power of creating
|
||||
application directly into PgAccess, defining new modules, procedures, forms
|
||||
and possibly making it a rapid development tool for PostgreSQL. The "scripts"
|
||||
and "forms" modules are using two new tables called pga_forms
|
||||
and pga_scripts. PgAccess take care of creating them if user is opening
|
||||
a new database and grant ALL permissions on them to PUBLIC. <BR>
|
||||
Both scripts and forms are containing in fact sources
|
||||
of code written in Tcl/Tk and when the user has choose to "open"
|
||||
one of them, either by double-clicking in the main window or pressing the
|
||||
"Open" button PgAccess is searching for them in pga_forms or
|
||||
pga_scripts table, get the code and simply "<B>eval</B>" it !<BR>
|
||||
Of course, when Designing a script, a simple text editor
|
||||
is opened and text is saved as is in pga_scripts table. When "designing"
|
||||
a form, a "form editor" that would be very similar with "Visual
|
||||
Tcl" would be invoked.</P>
|
||||
|
||||
<P> This mechanism and the extremely versatile scripting
|
||||
mode of Tcl/Tk would give PgAccess a great power for creating end user
|
||||
application using PosgreSQL. The most important thing is that the user
|
||||
could call procedures and functions that I have used for building up PgAccess
|
||||
!</P>
|
||||
|
||||
<H3>Forms</H3>
|
||||
|
||||
<P> Forms are special Tcl/Tk source code that is used
|
||||
for creating windows and placing widgets inside it. When Tcl/Tk is "eval"
|
||||
them, a new window appears, with buttons as defined that could call "user
|
||||
defined scripts", "user defined procedures" or "internal
|
||||
PgAccess procedures".<BR>
|
||||
For the moment, 0.70 version of PgAccess does not have
|
||||
a module for designing forms. It is intended to make an interface to the
|
||||
most powerful program of designing applications under Tcl/Tk , Visual Tcl
|
||||
, so it could handle forms designed to be used inside PgAccess.<BR>
|
||||
Forms can hold all the widgets allowed in Tcl/Tk , buttons,
|
||||
check-boxes, radio-buttons, list-boxes, frames, canvases, etc. With these
|
||||
forms, you can control your application so PgAccess would become just a
|
||||
"shell", a startup point for you applications.</P>
|
||||
|
||||
<H3>Scripts</H3>
|
||||
|
||||
<P> Scripts are normal Tcl/Tk code that is interpreted
|
||||
by Tcl/Tk. You can define your own procedures inside a script called "Library"
|
||||
for example. You can call your procedures from within another script, from
|
||||
another procedure.<BR>
|
||||
The most important thing is that you have total access
|
||||
to the PgAccess's core of functions and procedures used by me in building
|
||||
PgAccess as an application. Just write <B><TT><FONT COLOR="#000080">open_table
|
||||
"Your sample table"</FONT></TT></B> and you'll see the result.<BR>
|
||||
If you are writing a script called "Autoexec"
|
||||
then it will be executed every time the database is opened. You can put
|
||||
inside different commands that you want to be executed such as : running
|
||||
scripts that would define your own procedures such as <B><TT><FONT COLOR="#000080">execute_script
|
||||
"My own procedure library"</FONT></TT></B> or open a form with
|
||||
<B><TT><FONT COLOR="#000080">open_form "Main window with menu buttons"</FONT></TT></B>
|
||||
, and so on.</P>
|
||||
|
||||
<P>
|
||||
<HR WIDTH="100%"></P>
|
||||
|
||||
<H2>Examples :</H2>
|
||||
|
||||
<P>We would like to give you some examples for using forms and scripts.
|
||||
First of all, get your PgAccess 0.70 version NOW !</P>
|
||||
|
||||
<P><IMG SRC="a_right.gif" HEIGHT=20 WIDTH=20> Define your first
|
||||
form. Remember, the form design module hasn't arrived yet :-( , so you
|
||||
will have to define your first form using an action query :<BR>
|
||||
1. Click on Query tab and press "New" button<BR>
|
||||
2. Enter "<TT>Generate my first form</TT>" in Query name field<BR>
|
||||
3. Copy and paste from your browser window into query definition area the
|
||||
next text :<BR>
|
||||
<BR>
|
||||
<TT>insert into pga_forms values('My first form',' set base .pga_win_1;
|
||||
if {[winfo exists $base]} { wm deiconify $base; return }; toplevel $base
|
||||
-class Toplevel; wm focusmodel $base passive; wm geometry $base 395x389+325+188;
|
||||
wm maxsize $base 1009 738; wm minsize $base 1 1; wm overrideredirect $base
|
||||
0; wm resizable $base 1 1; wm deiconify $base; wm title $base "User
|
||||
defined Form No.1"; button $base.b1 -command {execute_script "My
|
||||
first script"} -text "My first button" ; button $base.bexit
|
||||
-command {destroy [focus]} -padx 9 -pady 3 -text Exit ; place $base.bexit
|
||||
-x 340 -y 355 -anchor nw -bordermode ignore ; place $base.b1 -x 10 -y 10
|
||||
-anchor nw;'); </TT></P>
|
||||
|
||||
<P>4. Press "Save query definition button" and then "Close"<BR>
|
||||
5. In the mai window, select by clicking the query "Generate my first
|
||||
form" and press "Open" button.</P>
|
||||
|
||||
<P>Your query must have been executed without errors! If you will check
|
||||
now the "Forms" tab, you will find there your first form. Press
|
||||
"Open" button and enjoy it! For the moment, if you will press
|
||||
"My first button" you will get an error message. Of course :
|
||||
we haven't yet defined our first script ! </P>
|
||||
|
||||
<P><IMG SRC="a_right.gif" HEIGHT=20 WIDTH=20> Defining our first
|
||||
script :<BR>
|
||||
1. Click on Scripts tab and pres "New" button<BR>
|
||||
2. Enter "My first script" in script's name field<BR>
|
||||
3. Enter the body as the script the following statements :<BR>
|
||||
<BR>
|
||||
<TT>MsgBox "Warning" "PgAccess unleashed!"<BR>
|
||||
open_table pga_scripts<BR>
|
||||
<BR>
|
||||
</TT>4. Press "Save" button then "Cancel"</P>
|
||||
|
||||
<P>It's now the time to define our first library script. I am defining
|
||||
not because I need it. I could write directly in "My first script"
|
||||
the instructions for creating that warning window but I only wanted to
|
||||
show you how you can mix PgAccess script execution with Tcl/Tk code and
|
||||
so on.</P>
|
||||
|
||||
<P><IMG SRC="a_right.gif" HEIGHT=20 WIDTH=20> Define our first
|
||||
library that will contain your "user defined" Tcl/Tk procedures
|
||||
and functions :<BR>
|
||||
1. Click on Scripts tab and pres "New" button<BR>
|
||||
2. Enter "My first library" in script's name field<BR>
|
||||
3. Enter the body of the script the following statements :<BR>
|
||||
<BR>
|
||||
<TT>proc MsgBox {title msg} {<BR>
|
||||
tk_messageBox -title $title -message
|
||||
$msg<BR>
|
||||
}<BR>
|
||||
<BR>
|
||||
</TT>4. Press "Save" button then "Cancel"</P>
|
||||
|
||||
<P><IMG SRC="file:/home/teo/a_right.gif" HEIGHT=20 WIDTH=20> Define
|
||||
our first autoexec script that will contain commands that will be executed
|
||||
when opening database :<BR>
|
||||
1. Click on Scripts tab and pres "New" button<BR>
|
||||
2. Enter "Autoexec" in script's name field<BR>
|
||||
3. Enter the body of the script the following statements :<BR>
|
||||
<BR>
|
||||
<TT>execute_script "My first library"<BR>
|
||||
open_form "My first form"<BR>
|
||||
<BR>
|
||||
</TT>4. Press "Save" button then "Cancel"</P>
|
||||
|
||||
<P>Everything is OK now! You will have to exit PgAccess and enter it again
|
||||
opening the same database ! Voila , your first form will pop-up on the
|
||||
screen, a message box is displayed and after clicking Ok button the table
|
||||
pga_scripts will be opened in table viewer revealing what's inside ! With
|
||||
this occasion I have shown how you could open in table view mode a "pga_..."
|
||||
system table that is hidden by PgAccess in main view mode!</P>
|
||||
|
||||
<P>I am stopping here, asking you to try this new features and sending
|
||||
me as more feed-backs as you can! What do you think about this new features
|
||||
? How would you like to be developed PgAccess in future ? In this
|
||||
moment, I am working in recoding the main part of PgAccess in order to
|
||||
give to the user more "system" functions that would help him
|
||||
creating new applications very easy.<BR>
|
||||
<BR>
|
||||
Remember : I'm waiting your messages at <A HREF="mailto:teo@flex.ro">teo@flex.ro</A>
|
||||
</P>
|
||||
|
||||
<P>
|
||||
<HR WIDTH="50%"></P>
|
||||
|
||||
<P>You will also have the ability of hiding the main window of PgAccess
|
||||
at the beginning of "Autoexec" script execution and showing it
|
||||
before destroying "My first form". For this example, delete the
|
||||
previously defined "My first form" and create it with another
|
||||
action query with this code :<BR>
|
||||
<BR>
|
||||
<TT>insert into pga_forms values('My first form',' set base .pga_win_1;
|
||||
if {[winfo exists $base]} { wm deiconify $base; return }; toplevel $base
|
||||
-class Toplevel; wm focusmodel $base passive; wm geometry $base 395x389+325+188;
|
||||
wm maxsize $base 1009 738; wm minsize $base 1 1; wm overrideredirect $base
|
||||
0; wm resizable $base 1 1; wm deiconify $base; wm title $base "User
|
||||
defined Form No.1"; button $base.b1 -command {execute_script "My
|
||||
first script"} -text "My first button" ; button $base.bexit
|
||||
-command {Window show .dw ; destroy [focus]} -padx 9 -pady 3 -text Exit
|
||||
; place $base.bexit -x 340 -y 355 -anchor nw -bordermode ignore ; place
|
||||
$base.b1 -x 10 -y 10 -anchor nw;'); <BR>
|
||||
<BR>
|
||||
</TT>This new one is just showing main window (.dw) before destroying the
|
||||
"user defined window" . <BR>
|
||||
Also make "Autoexec" script to show like this :<BR>
|
||||
<BR>
|
||||
<TT>execute_script "My first library"<BR>
|
||||
Window hide .dw<BR>
|
||||
open_form "My first form"</TT><BR>
|
||||
</P>
|
||||
|
||||
</BODY>
|
||||
</HTML>
|
@ -164,6 +164,7 @@ set tablename $objname
|
||||
switch $activetab {
|
||||
Queries {open_query design}
|
||||
Scripts {design_script $objname}
|
||||
Forms {fd_load_form $objname design}
|
||||
Reports {
|
||||
Window show .rb
|
||||
tkwait visibility .rb
|
||||
@ -261,6 +262,13 @@ switch $activetab {
|
||||
Window show .rb ; tkwait visibility .rb ; rb_init ; set rbvar(reportname) {} ; set rbvar(justpreview) 0
|
||||
focus .rb.e2
|
||||
}
|
||||
Forms {
|
||||
Window show .fd
|
||||
Window show .fdtb
|
||||
Window show .fdmenu
|
||||
Window show .fda
|
||||
fd_init
|
||||
}
|
||||
Scripts {
|
||||
design_script {}
|
||||
}
|
||||
@ -317,7 +325,7 @@ if {$activetab=="Sequences"} return;
|
||||
if {$activetab=="Functions"} return;
|
||||
set temp [get_dwlb_Selection]
|
||||
if {$temp==""} {
|
||||
tk_messageBox -title Warning -message "Please select first an object!"
|
||||
tk_messageBox -title Warning -message "Please select an object first !"
|
||||
return;
|
||||
}
|
||||
set oldobjname $temp
|
||||
@ -326,21 +334,25 @@ Window show .rf
|
||||
|
||||
proc {cmd_Reports} {} {
|
||||
global dbc
|
||||
cursor_watch .dw
|
||||
catch {
|
||||
pg_select $dbc "select * from pga_reports order by reportname" rec {
|
||||
.dw.lb insert end "$rec(reportname)"
|
||||
}
|
||||
}
|
||||
cursor_arrow .dw
|
||||
}
|
||||
|
||||
proc {cmd_Scripts} {} {
|
||||
global dbc
|
||||
cursor_watch .dw
|
||||
.dw.lb delete 0 end
|
||||
catch {
|
||||
pg_select $dbc "select * from pga_scripts order by scriptname" rec {
|
||||
.dw.lb insert end $rec(scriptname)
|
||||
}
|
||||
}
|
||||
cursor_arrow .dw
|
||||
}
|
||||
|
||||
proc {cmd_Sequences} {} {
|
||||
@ -502,6 +514,371 @@ global dbc
|
||||
# }
|
||||
}
|
||||
|
||||
proc {fd_change_coord} {} {
|
||||
global fdvar fdobj
|
||||
set i $fdvar(moveitemobj)
|
||||
set c $fdobj($i,c)
|
||||
set c [list $fdvar(c_left) $fdvar(c_top) [expr $fdvar(c_left)+$fdvar(c_width)] [expr $fdvar(c_top)+$fdvar(c_height)]]
|
||||
set fdobj($i,c) $c
|
||||
.fd.c delete o$i
|
||||
fd_draw_object $i
|
||||
fd_draw_hookers $i
|
||||
}
|
||||
|
||||
proc {fd_delete_object} {} {
|
||||
global fdvar
|
||||
set i $fdvar(moveitemobj)
|
||||
.fd.c delete o$i
|
||||
.fd.c delete hook
|
||||
set j [lsearch $fdvar(objlist) $i]
|
||||
set fdvar(objlist) [lreplace $fdvar(objlist) $j $j]
|
||||
}
|
||||
|
||||
proc {fd_draw_hook} {x y} {
|
||||
.fd.c create rectangle [expr $x-2] [expr $y-2] [expr $x+2] [expr $y+2] -fill black -tags hook
|
||||
}
|
||||
|
||||
proc {fd_draw_hookers} {i} {
|
||||
global fdobj
|
||||
foreach {x1 y1 x2 y2} $fdobj($i,c) {}
|
||||
.fd.c delete hook
|
||||
fd_draw_hook $x1 $y1
|
||||
fd_draw_hook $x1 $y2
|
||||
fd_draw_hook $x2 $y1
|
||||
fd_draw_hook $x2 $y2
|
||||
}
|
||||
|
||||
proc {fd_draw_object} {i} {
|
||||
global fdvar fdobj
|
||||
set c $fdobj($i,c)
|
||||
foreach {x1 y1 x2 y2} $c {}
|
||||
.fd.c delete o$i
|
||||
switch $fdobj($i,t) {
|
||||
button {
|
||||
fd_draw_rectangle $x1 $y1 $x2 $y2 raised #a0a0a0 o$i
|
||||
.fd.c create text [expr ($x1+$x2)/2] [expr ($y1+$y2)/2] -text $fdobj($i,l) -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -tags o$i
|
||||
}
|
||||
entry {
|
||||
fd_draw_rectangle $x1 $y1 $x2 $y2 sunken white o$i
|
||||
}
|
||||
label {
|
||||
.fd.c create text $x1 $y1 -text $fdobj($i,l) -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -anchor nw -tags o$i
|
||||
}
|
||||
checkbox {
|
||||
fd_draw_rectangle [expr $x1+2] [expr $y1+5] [expr $x1+12] [expr $y1+15] raised #a0a0a0 o$i
|
||||
.fd.c create text [expr $x1+20] [expr $y1+3] -text $fdobj($i,l) -anchor nw -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -tags o$i
|
||||
}
|
||||
radio {
|
||||
.fd.c create oval [expr $x1+4] [expr $y1+5] [expr $x1+14] [expr $y1+15] -fill white -tags o$i
|
||||
.fd.c create text [expr $x1+24] [expr $y1+3] -text $fdobj($i,l) -anchor nw -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -tags o$i
|
||||
}
|
||||
query {
|
||||
.fd.c create oval $x1 $y1 [expr $x1+20] [expr $y1+20] -fill white -tags o$i
|
||||
.fd.c create text [expr $x1+5] [expr $y1+4] -text Q -anchor nw -font -Adobe-Helvetica-Bold-R-Normal-*-*-120-*-*-*-*-* -tags o$i
|
||||
}
|
||||
listbox {
|
||||
fd_draw_rectangle $x1 $y1 [expr $x2-12] $y2 sunken white o$i
|
||||
fd_draw_rectangle [expr $x2-11] $y1 $x2 $y2 sunken gray o$i
|
||||
.fd.c create line [expr $x2-5] $y1 $x2 [expr $y1+10] -fill #808080 -tags o$i
|
||||
.fd.c create line [expr $x2-10] [expr $y1+9] $x2 [expr $y1+9] -fill #808080 -tags o$i
|
||||
.fd.c create line [expr $x2-10] [expr $y1+9] [expr $x2-5] $y1 -fill white -tags o$i
|
||||
.fd.c create line [expr $x2-5] $y2 $x2 [expr $y2-10] -fill #808080 -tags o$i
|
||||
.fd.c create line [expr $x2-10] [expr $y2-9] $x2 [expr $y2-9] -fill white -tags o$i
|
||||
.fd.c create line [expr $x2-10] [expr $y2-9] [expr $x2-5] $y2 -fill white -tags o$i
|
||||
}
|
||||
}
|
||||
.fd.c raise hook
|
||||
}
|
||||
|
||||
proc {fd_draw_rectangle} {x1 y1 x2 y2 relief color tag} {
|
||||
if {$relief=="raised"} {
|
||||
set c1 white
|
||||
set c2 #606060
|
||||
} else {
|
||||
set c1 #606060
|
||||
set c2 white
|
||||
}
|
||||
if {$color != "none"} {
|
||||
.fd.c create rectangle $x1 $y1 $x2 $y2 -outline "" -fill $color -tags $tag
|
||||
}
|
||||
.fd.c create line $x1 $y1 $x2 $y1 -fill $c1 -tags $tag
|
||||
.fd.c create line $x1 $y1 $x1 $y2 -fill $c1 -tags $tag
|
||||
.fd.c create line $x1 $y2 $x2 $y2 -fill $c2 -tags $tag
|
||||
.fd.c create line $x2 $y1 $x2 [expr 1+$y2] -fill $c2 -tags $tag
|
||||
}
|
||||
|
||||
proc {fd_init} {} {
|
||||
global fdvar fdobj
|
||||
catch {unset fdvar}
|
||||
catch {unset fdobj}
|
||||
catch {.fd.c delete all}
|
||||
set fdvar(forminame) {udf0}
|
||||
set fdvar(formname) "New form"
|
||||
set fdvar(objnum) 0
|
||||
set fdvar(objlist) {}
|
||||
set fdvar(oper) none
|
||||
set fdvar(tool) point
|
||||
}
|
||||
|
||||
proc {fd_item_click} {x y} {
|
||||
global fdvar fdobj
|
||||
set fdvar(oper) none
|
||||
set fdvar(moveitemobj) {}
|
||||
set il [.fd.c find overlapping $x $y $x $y]
|
||||
if {[llength $il]==0} return
|
||||
set tl [.fd.c gettags [lindex $il 0]]
|
||||
set i [lsearch -glob $tl o*]
|
||||
if {$i==-1} return
|
||||
set objnum [string range [lindex $tl $i] 1 end]
|
||||
set fdvar(moveitemobj) $objnum
|
||||
set fdvar(moveitemx) $x
|
||||
set fdvar(moveitemy) $y
|
||||
set fdvar(oper) move
|
||||
fd_show_attributes $objnum
|
||||
fd_draw_hookers $objnum
|
||||
}
|
||||
|
||||
proc {fd_load_form} {name mode} {
|
||||
global fdvar fdobj dbc
|
||||
fd_init
|
||||
set fdvar(formname) $name
|
||||
if {$mode=="design"} {
|
||||
Window show .fd
|
||||
Window show .fdmenu
|
||||
Window show .fda
|
||||
Window show .fdtb
|
||||
}
|
||||
#set fid [open "$name.form" r]
|
||||
#set info [gets $fid]
|
||||
#close $fid
|
||||
set res [pg_exec $dbc "select * from pga_forms where formname='$fdvar(formname)'"]
|
||||
set info [lindex [pg_result $res -getTuple 0] 1]
|
||||
pg_result $res -clear
|
||||
set fdvar(forminame) [lindex $info 0]
|
||||
set fdvar(objnum) [lindex $info 1]
|
||||
set fdvar(objlist) [lindex $info 2]
|
||||
set fdvar(geometry) [lindex $info 3]
|
||||
set j 0
|
||||
foreach objinfo [lrange $info 4 end] {
|
||||
foreach {t n c x l v} $objinfo {}
|
||||
set i [lindex $fdvar(objlist) $j]
|
||||
set fdobj($i,t) $t
|
||||
set fdobj($i,n) $n
|
||||
set fdobj($i,c) $c
|
||||
set fdobj($i,l) $l
|
||||
set fdobj($i,x) $x
|
||||
set fdobj($i,v) $v
|
||||
if {$mode=="design"} {fd_draw_object $i}
|
||||
incr j
|
||||
}
|
||||
}
|
||||
|
||||
proc {fd_mouse_down} {x y} {
|
||||
global fdvar
|
||||
set x [expr 3*int($x/3)]
|
||||
set y [expr 3*int($y/3)]
|
||||
set fdvar(xstart) $x
|
||||
set fdvar(ystart) $y
|
||||
if {$fdvar(tool)=="point"} {
|
||||
fd_item_click $x $y
|
||||
return
|
||||
}
|
||||
set fdvar(oper) draw
|
||||
}
|
||||
|
||||
proc {fd_mouse_move} {x y} {
|
||||
global fdvar
|
||||
#set fdvar(msg) "x=$x y=$y"
|
||||
set x [expr 3*int($x/3)]
|
||||
set y [expr 3*int($y/3)]
|
||||
set oper ""
|
||||
catch {set oper $fdvar(oper)}
|
||||
if {$oper=="draw"} {
|
||||
catch {.fd.c delete curdraw}
|
||||
.fd.c create rectangle $fdvar(xstart) $fdvar(ystart) $x $y -tags curdraw
|
||||
return
|
||||
}
|
||||
if {$oper=="move"} {
|
||||
set dx [expr $x-$fdvar(moveitemx)]
|
||||
set dy [expr $y-$fdvar(moveitemy)]
|
||||
.fd.c move o$fdvar(moveitemobj) $dx $dy
|
||||
.fd.c move hook $dx $dy
|
||||
set fdvar(moveitemx) $x
|
||||
set fdvar(moveitemy) $y
|
||||
}
|
||||
}
|
||||
|
||||
proc {fd_mouse_up} {x y} {
|
||||
global fdvar fdobj
|
||||
set x [expr 3*int($x/3)]
|
||||
set y [expr 3*int($y/3)]
|
||||
if {$fdvar(oper)=="move"} {
|
||||
set fdvar(moveitem) {}
|
||||
set fdvar(oper) none
|
||||
set oc $fdobj($fdvar(moveitemobj),c)
|
||||
set dx [expr $x - $fdvar(xstart)]
|
||||
set dy [expr $y - $fdvar(ystart)]
|
||||
set newcoord [list [expr $dx+[lindex $oc 0]] [expr $dy+[lindex $oc 1]] [expr $dx+[lindex $oc 2]] [expr $dy+[lindex $oc 3]]]
|
||||
set fdobj($fdvar(moveitemobj),c) $newcoord
|
||||
fd_show_attributes $fdvar(moveitemobj)
|
||||
fd_draw_hookers $fdvar(moveitemobj)
|
||||
return
|
||||
}
|
||||
if {$fdvar(oper)!="draw"} return
|
||||
set fdvar(oper) none
|
||||
.fd.c delete curdraw
|
||||
incr fdvar(objnum)
|
||||
set i $fdvar(objnum)
|
||||
lappend fdvar(objlist) $i
|
||||
# t=type , c=coords , n=name , l=label
|
||||
set fdobj($i,t) $fdvar(tool)
|
||||
set fdobj($i,c) [list $fdvar(xstart) $fdvar(ystart) $x $y]
|
||||
set fdobj($i,n) $fdvar(tool)$i
|
||||
set fdobj($i,l) $fdvar(tool)$i
|
||||
set fdobj($i,x) {}
|
||||
set fdobj($i,v) {}
|
||||
fd_draw_object $i
|
||||
fd_show_attributes $i
|
||||
set fdvar(moveitemobj) $i
|
||||
fd_draw_hookers $i
|
||||
set fdvar(tool) point
|
||||
}
|
||||
|
||||
proc {fd_save_form} {name} {
|
||||
global fdvar fdobj dbc
|
||||
if {[tk_messageBox -title Warning -message "Do you want to save the form into the database ?" -type yesno -default yes]=="no"} {return 1}
|
||||
if {[string length $fdvar(forminame)]==0} {
|
||||
tk_messageBox -title Warning -message "Forms need an internal name, only literals, low case"
|
||||
return 0
|
||||
}
|
||||
if {[string length $fdvar(formname)]==0} {
|
||||
tk_messageBox -title Warning -message "Form must have a name"
|
||||
return 0
|
||||
}
|
||||
#set fid [open "$name.form" w]
|
||||
set info [list $fdvar(forminame) $fdvar(objnum) $fdvar(objlist) [wm geometry .fd]]
|
||||
foreach i $fdvar(objlist) {
|
||||
lappend info [list $fdobj($i,t) $fdobj($i,n) $fdobj($i,c) $fdobj($i,x) $fdobj($i,l) $fdobj($i,v)]
|
||||
}
|
||||
#puts $fid $info
|
||||
#close $fid
|
||||
set res [pg_exec $dbc "delete from pga_forms where formname='$fdvar(formname)'"]
|
||||
pg_result $res -clear
|
||||
set res [pg_exec $dbc "insert into pga_forms values ('$fdvar(formname)','$info')"]
|
||||
pg_result $res -clear
|
||||
cmd_Forms
|
||||
return 1
|
||||
}
|
||||
|
||||
proc {fd_set_command} {} {
|
||||
global fdobj fdvar
|
||||
set i $fdvar(moveitemobj)
|
||||
set fdobj($i,x) $fdvar(c_cmd)
|
||||
}
|
||||
|
||||
proc {fd_set_name} {} {
|
||||
global fdvar fdobj
|
||||
set i $fdvar(moveitemobj)
|
||||
foreach k $fdvar(objlist) {
|
||||
if {($fdobj($k,n)==$fdvar(c_name)) && ($i!=$k)} {
|
||||
tk_messageBox -title Warning -message "There is another object (a $fdobj($k,t)) with the same name. Please change it!"
|
||||
return
|
||||
}
|
||||
}
|
||||
set fdobj($i,n) $fdvar(c_name)
|
||||
fd_show_attributes $i
|
||||
}
|
||||
|
||||
proc {fd_set_text} {} {
|
||||
global fdvar fdobj
|
||||
set fdobj($fdvar(moveitemobj),l) $fdvar(c_text)
|
||||
fd_draw_object $fdvar(moveitemobj)
|
||||
}
|
||||
|
||||
proc {fd_show_attributes} {i} {
|
||||
global fdvar fdobj
|
||||
set fdvar(c_info) "$fdobj($i,t) .$fdvar(forminame).$fdobj($i,n)"
|
||||
set fdvar(c_name) $fdobj($i,n)
|
||||
set c $fdobj($i,c)
|
||||
set fdvar(c_top) [lindex $c 1]
|
||||
set fdvar(c_left) [lindex $c 0]
|
||||
set fdvar(c_width) [expr [lindex $c 2]-[lindex $c 0]]
|
||||
set fdvar(c_height) [expr [lindex $c 3]-[lindex $c 1]]
|
||||
set fdvar(c_cmd) {}
|
||||
catch {set fdvar(c_cmd) $fdobj($i,x)}
|
||||
set fdvar(c_var) {}
|
||||
catch {set fdvar(c_var) $fdobj($i,v)}
|
||||
set fdvar(c_text) {}
|
||||
catch {set fdvar(c_text) $fdobj($i,l)}
|
||||
}
|
||||
|
||||
proc {fd_test} {} {
|
||||
global fdvar fdobj dbc datasets
|
||||
set base .$fdvar(forminame)
|
||||
if {[winfo exists $base]} {
|
||||
wm deiconify $base; return
|
||||
}
|
||||
toplevel $base -class Toplevel
|
||||
wm focusmodel $base passive
|
||||
wm geometry $base $fdvar(geometry)
|
||||
wm maxsize $base 785 570
|
||||
wm minsize $base 1 1
|
||||
wm overrideredirect $base 0
|
||||
wm resizable $base 1 1
|
||||
wm deiconify $base
|
||||
wm title $base $fdvar(formname)
|
||||
foreach item $fdvar(objlist) {
|
||||
set coord $fdobj($item,c)
|
||||
set name $fdobj($item,n)
|
||||
set wh "-width [expr 3+[lindex $coord 2]-[lindex $coord 0]] -height [expr 3+[lindex $coord 3]-[lindex $coord 1]]"
|
||||
set visual 1
|
||||
switch $fdobj($item,t) {
|
||||
button {
|
||||
set cmd {}
|
||||
catch {set cmd $fdobj($item,x)}
|
||||
button $base.$name -borderwidth 1 -padx 0 -pady 0 -text "$fdobj($item,l)" -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -command [subst {$cmd}]
|
||||
}
|
||||
checkbox {
|
||||
checkbutton $base.$name -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -text "$fdobj($item,l)" -variable "$fdobj($item,v)" -borderwidth 1
|
||||
set wh {}
|
||||
}
|
||||
query { set visual 0
|
||||
set procbody "proc $base.$name:execute {} {global dbc datasets ; set datasets($base.$name) \[pg_exec \$dbc \"$fdobj($item,x)\"\] ; set ceva \[$base.$name:fields\]}"
|
||||
eval $procbody
|
||||
# tk_messageBox -message $procbody
|
||||
set procbody "proc $base.$name:nrecords {} {global datasets ; return \[pg_result \$datasets($base.$name) -numTuples\]}"
|
||||
eval $procbody
|
||||
# tk_messageBox -message $procbody
|
||||
set procbody "proc $base.$name:close {} {global datasets ; pg_result \$datasets($base.$name) -clear}"
|
||||
eval $procbody
|
||||
# tk_messageBox -message $procbody
|
||||
set procbody "proc $base.$name:fields {} {global datasets ; set fl {} ; foreach fd \[pg_result \$datasets($base.$name) -lAttributes\] {lappend fl \[lindex \$fd 0\]} ; set datasets($base.$name,fields) \$fl ; return \$fl}"
|
||||
# tk_messageBox -message $procbody
|
||||
eval $procbody
|
||||
eval "proc $base.$name:movefirst {} {global datasets ; set datasets($base.$name,recno) 0}"
|
||||
eval "proc $base.$name:movenext {} {global datasets ; incr datasets($base.$name,recno)}"
|
||||
eval "proc $base.$name:moveprevious {} {global datasets ; incr datasets($base.$name,recno) -1 ; if {\$datasets($base.$name,recno)==-1} {$base.$name:movefirst}}"
|
||||
eval "proc $base.$name:movelast {} {global datasets ; set datasets($base.$name,recno) \[expr \[$base.$name:nrecords\] -1\]}"
|
||||
eval "proc $base.$name:updatecontrols {} {global datasets ; set i 0 ; foreach fld \$datasets($base.$name,fields) {catch {upvar $base.$name.\$fld dbvar ; set dbvar \[lindex \[pg_result \$datasets($base.$name) -getTuple \$datasets($base.$name,recno)\] \$i\]} ; incr i}}"
|
||||
}
|
||||
radio {
|
||||
radiobutton $base.$name -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -text "$fdobj($item,l)" -variable "$fdobj($item,v)" -borderwidth 1
|
||||
set wh {}
|
||||
}
|
||||
entry {
|
||||
set var {} ; catch {set var $fdobj($item,v)}
|
||||
entry $base.$name -bo 1 -ba white -selectborderwidth 0 -highlightthickness 0
|
||||
if {$var!=""} {$base.$name configure -textvar $var}
|
||||
}
|
||||
label {set wh {} ; label $base.$name -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -anchor nw -padx 0 -pady 0 -text $fdobj($item,l)}
|
||||
listbox {listbox $base.$name -borderwidth 1 -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*}
|
||||
}
|
||||
if $visual {eval [subst "place $base.$name -x [expr [lindex $coord 0]-1] -y [expr [lindex $coord 1]-1] -anchor nw $wh -bordermode ignore"]}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
proc {get_dwlb_Selection} {} {
|
||||
set temp [.dw.lb curselection]
|
||||
if {$temp==""} return "";
|
||||
@ -554,6 +931,9 @@ if {$retval} {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
proc {mw_canvas_click} {x y} {
|
||||
global mw msg
|
||||
if {![mw_exit_edit]} return
|
||||
@ -1069,13 +1449,8 @@ if {[catch {set newdbc [pg_connect $newdbname -host $newhost -port $newpport]} m
|
||||
}
|
||||
|
||||
proc {open_form} {formname} {
|
||||
global dbc
|
||||
|
||||
set frmsrc {}
|
||||
pg_select $dbc "select * from pga_forms where formname='$formname'" rec {
|
||||
set frmsrc $rec(formsource)
|
||||
}
|
||||
eval $frmsrc
|
||||
fd_load_form $formname run
|
||||
fd_test
|
||||
}
|
||||
|
||||
proc {open_function} {objname} {
|
||||
@ -1960,12 +2335,6 @@ sql_exec noquiet "delete from pga_reports where reportname='$rbvar(reportname)'"
|
||||
sql_exec noquiet "insert into pga_reports (reportname,reportsource,reportbody) values ('$rbvar(reportname)','$rbvar(tablename)','$prog')"
|
||||
}
|
||||
|
||||
proc {main} {argc argv} {
|
||||
global dbc
|
||||
set dbc [pg_connect ultex]
|
||||
rb_init
|
||||
}
|
||||
|
||||
proc {save_pref} {} {
|
||||
global pref
|
||||
catch {
|
||||
@ -2043,7 +2412,7 @@ place $w -x 7
|
||||
place .dw.lmask -x 80 -y [expr 86+25*[lsearch -exact $tablist $curtab]]
|
||||
set activetab $curtab
|
||||
# Tabs where button Design is enabled
|
||||
if {[lsearch {Scripts Queries Reports} $activetab]!=-1} {
|
||||
if {[lsearch {Scripts Queries Reports Forms} $activetab]!=-1} {
|
||||
.dw.btndesign configure -state normal
|
||||
}
|
||||
.dw.lb delete 0 end
|
||||
@ -2190,7 +2559,7 @@ proc vTclWindow.about {base} {
|
||||
label $base.l2 -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -relief groove -text {A Tcl/Tk interface to
|
||||
PostgreSQL
|
||||
by Constantin Teodorescu}
|
||||
label $base.l3 -borderwidth 0 -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -relief sunken -text {vers 0.76}
|
||||
label $base.l3 -borderwidth 0 -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -relief sunken -text {vers 0.81}
|
||||
label $base.l4 -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -relief groove -text {You will always get the latest version at:
|
||||
http://www.flex.ro/pgaccess
|
||||
|
||||
@ -3642,6 +4011,424 @@ proc vTclWindow.tiw {base} {
|
||||
place $base.fr11.lif -x 10 -y 70 -width 178 -height 68 -anchor nw -bordermode ignore
|
||||
}
|
||||
|
||||
proc vTclWindow.fd {base} {
|
||||
if {$base == ""} {
|
||||
set base .fd
|
||||
}
|
||||
if {[winfo exists $base]} {
|
||||
wm deiconify $base; return
|
||||
}
|
||||
###################
|
||||
# CREATING WIDGETS
|
||||
###################
|
||||
toplevel $base -class Toplevel
|
||||
wm focusmodel $base passive
|
||||
wm geometry $base 377x315+185+234
|
||||
wm maxsize $base 785 570
|
||||
wm minsize $base 1 1
|
||||
wm overrideredirect $base 0
|
||||
wm resizable $base 1 1
|
||||
wm deiconify $base
|
||||
wm title $base "Form design"
|
||||
bind $base <Key-Delete> {
|
||||
fd_delete_object
|
||||
}
|
||||
canvas $base.c \
|
||||
-background #828282 -height 207 -highlightthickness 0 -relief ridge \
|
||||
-selectborderwidth 0 -width 295
|
||||
bind $base.c <Button-1> {
|
||||
fd_mouse_down %x %y
|
||||
}
|
||||
bind $base.c <ButtonRelease-1> {
|
||||
fd_mouse_up %x %y
|
||||
}
|
||||
bind $base.c <Motion> {
|
||||
fd_mouse_move %x %y
|
||||
}
|
||||
###################
|
||||
# SETTING GEOMETRY
|
||||
###################
|
||||
pack $base.c \
|
||||
-in .fd -anchor center -expand 1 -fill both -side top
|
||||
}
|
||||
|
||||
proc vTclWindow.fda {base} {
|
||||
if {$base == ""} {
|
||||
set base .fda
|
||||
}
|
||||
if {[winfo exists $base]} {
|
||||
wm deiconify $base; return
|
||||
}
|
||||
###################
|
||||
# CREATING WIDGETS
|
||||
###################
|
||||
toplevel $base -class Toplevel
|
||||
wm focusmodel $base passive
|
||||
wm geometry $base 225x197+589+29
|
||||
wm maxsize $base 785 570
|
||||
wm minsize $base 1 1
|
||||
wm overrideredirect $base 0
|
||||
wm resizable $base 1 1
|
||||
wm deiconify $base
|
||||
wm title $base "Attributes"
|
||||
label $base.l1 \
|
||||
-anchor nw -borderwidth 0 \
|
||||
-font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* \
|
||||
-justify left -text Name -width 8
|
||||
entry $base.e1 \
|
||||
-background #fefefe -borderwidth 1 -highlightthickness 0 \
|
||||
-selectborderwidth 0 -textvariable fdvar(c_name)
|
||||
bind $base.e1 <Key-Return> {
|
||||
fd_set_name
|
||||
}
|
||||
label $base.l2 \
|
||||
-anchor nw -borderwidth 0 \
|
||||
-font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* \
|
||||
-justify left -text Top -width 8
|
||||
entry $base.e2 \
|
||||
-background #fefefe -borderwidth 1 -highlightthickness 0 \
|
||||
-selectborderwidth 0 -textvariable fdvar(c_top)
|
||||
bind $base.e2 <Key-Return> {
|
||||
fd_change_coord
|
||||
}
|
||||
label $base.l3 \
|
||||
-anchor w -borderwidth 0 \
|
||||
-font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -text Left \
|
||||
-width 8
|
||||
entry $base.e3 \
|
||||
-background #fefefe -borderwidth 1 -highlightthickness 0 \
|
||||
-selectborderwidth 0 -textvariable fdvar(c_left)
|
||||
bind $base.e3 <Key-Return> {
|
||||
fd_change_coord
|
||||
}
|
||||
label $base.l4 \
|
||||
-anchor w -borderwidth 0 \
|
||||
-font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -text Width \
|
||||
-width 8
|
||||
entry $base.e4 \
|
||||
-background #fefefe -borderwidth 1 -highlightthickness 0 \
|
||||
-selectborderwidth 0 -textvariable fdvar(c_width)
|
||||
bind $base.e4 <Key-Return> {
|
||||
fd_change_coord
|
||||
}
|
||||
label $base.l5 \
|
||||
-anchor w -borderwidth 0 \
|
||||
-font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -padx 0 \
|
||||
-text Height -width 8
|
||||
entry $base.e5 \
|
||||
-background #fefefe -borderwidth 1 -highlightthickness 0 \
|
||||
-selectborderwidth 0 -textvariable fdvar(c_height)
|
||||
bind $base.e5 <Key-Return> {
|
||||
fd_change_coord
|
||||
}
|
||||
label $base.l6 \
|
||||
-borderwidth 0 \
|
||||
-font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -padx 0 \
|
||||
-text Command
|
||||
entry $base.e6 \
|
||||
-background #fefefe -borderwidth 1 -highlightthickness 0 \
|
||||
-selectborderwidth 0 -textvariable fdvar(c_cmd)
|
||||
bind $base.e6 <Key-Return> {
|
||||
fd_set_command
|
||||
}
|
||||
button $base.bcmd \
|
||||
-borderwidth 1 \
|
||||
-command {Window show .fdcmd
|
||||
.fdcmd.f.txt delete 1.0 end
|
||||
.fdcmd.f.txt insert end $fdvar(c_cmd)} \
|
||||
-font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -padx 3 \
|
||||
-pady 3 -text ... -width 1
|
||||
label $base.l7 \
|
||||
-anchor w -borderwidth 0 \
|
||||
-font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* \
|
||||
-text Variable -width 8
|
||||
entry $base.e7 \
|
||||
-background #fefefe -borderwidth 1 -highlightthickness 0 \
|
||||
-selectborderwidth 0 -textvariable fdvar(c_var)
|
||||
bind $base.e7 <Key-Return> {
|
||||
set fdobj($fdvar(moveitemobj),v) $fdvar(c_var)
|
||||
}
|
||||
label $base.l8 \
|
||||
-anchor w -borderwidth 0 \
|
||||
-font -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-* -text Text \
|
||||
-width 8
|
||||
entry $base.e8 \
|
||||
-background #fefefe -borderwidth 1 -highlightthickness 0 \
|
||||
-selectborderwidth 0 -textvariable fdvar(c_text)
|
||||
bind $base.e8 <Key-Return> {
|
||||
fd_set_text
|
||||
}
|
||||
label $base.l0 \
|
||||
-borderwidth 1 -relief raised -text {checkbox .udf0.checkbox17} \
|
||||
-textvariable fdvar(c_info) -width 28
|
||||
###################
|
||||
# SETTING GEOMETRY
|
||||
###################
|
||||
grid $base.l1 \
|
||||
-in .fda -column 0 -row 1 -columnspan 1 -rowspan 1
|
||||
grid $base.e1 \
|
||||
-in .fda -column 1 -row 1 -columnspan 1 -rowspan 1 -pady 2
|
||||
grid $base.l2 \
|
||||
-in .fda -column 0 -row 2 -columnspan 1 -rowspan 1
|
||||
grid $base.e2 \
|
||||
-in .fda -column 1 -row 2 -columnspan 1 -rowspan 1
|
||||
grid $base.l3 \
|
||||
-in .fda -column 0 -row 3 -columnspan 1 -rowspan 1
|
||||
grid $base.e3 \
|
||||
-in .fda -column 1 -row 3 -columnspan 1 -rowspan 1 -pady 2
|
||||
grid $base.l4 \
|
||||
-in .fda -column 0 -row 4 -columnspan 1 -rowspan 1
|
||||
grid $base.e4 \
|
||||
-in .fda -column 1 -row 4 -columnspan 1 -rowspan 1
|
||||
grid $base.l5 \
|
||||
-in .fda -column 0 -row 5 -columnspan 1 -rowspan 1
|
||||
grid $base.e5 \
|
||||
-in .fda -column 1 -row 5 -columnspan 1 -rowspan 1 -pady 2
|
||||
grid $base.l6 \
|
||||
-in .fda -column 0 -row 6 -columnspan 1 -rowspan 1
|
||||
grid $base.e6 \
|
||||
-in .fda -column 1 -row 6 -columnspan 1 -rowspan 1
|
||||
grid $base.bcmd \
|
||||
-in .fda -column 2 -row 6 -columnspan 1 -rowspan 1
|
||||
grid $base.l7 \
|
||||
-in .fda -column 0 -row 7 -columnspan 1 -rowspan 1
|
||||
grid $base.e7 \
|
||||
-in .fda -column 1 -row 7 -columnspan 1 -rowspan 1
|
||||
grid $base.l8 \
|
||||
-in .fda -column 0 -row 8 -columnspan 1 -rowspan 1
|
||||
grid $base.e8 \
|
||||
-in .fda -column 1 -row 8 -columnspan 1 -rowspan 1 -pady 2
|
||||
grid $base.l0 \
|
||||
-in .fda -column 0 -row 0 -columnspan 2 -rowspan 1
|
||||
}
|
||||
|
||||
proc vTclWindow.fdcmd {base} {
|
||||
if {$base == ""} {
|
||||
set base .fdcmd
|
||||
}
|
||||
if {[winfo exists $base]} {
|
||||
wm deiconify $base; return
|
||||
}
|
||||
###################
|
||||
# CREATING WIDGETS
|
||||
###################
|
||||
toplevel $base -class Toplevel
|
||||
wm focusmodel $base passive
|
||||
wm geometry $base 282x274+616+367
|
||||
wm maxsize $base 785 570
|
||||
wm minsize $base 1 19
|
||||
wm overrideredirect $base 0
|
||||
wm resizable $base 1 1
|
||||
wm title $base "Command"
|
||||
frame $base.f \
|
||||
-borderwidth 2 -height 75 -relief groove -width 125
|
||||
scrollbar $base.f.sb \
|
||||
-borderwidth 1 -command {.fdcmd.f.txt yview} -orient vert -width 12
|
||||
text $base.f.txt \
|
||||
-font -*-Clean-Medium-R-Normal--*-130-*-*-*-*-*-* -height 1 \
|
||||
-width 115 -yscrollcommand {.fdcmd.f.sb set}
|
||||
frame $base.fb \
|
||||
-height 75 -width 125
|
||||
button $base.fb.b1 \
|
||||
-borderwidth 1 \
|
||||
-command {set fdvar(c_cmd) [.fdcmd.f.txt get 1.0 "end - 1 chars"]
|
||||
Window hide .fdcmd
|
||||
fd_set_command} \
|
||||
-font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -padx 9 \
|
||||
-pady 3 -text Ok -width 5
|
||||
button $base.fb.b2 \
|
||||
-borderwidth 1 -command {Window hide .fdcmd} \
|
||||
-font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -padx 9 \
|
||||
-pady 3 -text Cancel
|
||||
###################
|
||||
# SETTING GEOMETRY
|
||||
###################
|
||||
pack $base.f \
|
||||
-in .fdcmd -anchor center -expand 1 -fill both -side top
|
||||
pack $base.f.sb \
|
||||
-in .fdcmd.f -anchor e -expand 1 -fill y -side right
|
||||
pack $base.f.txt \
|
||||
-in .fdcmd.f -anchor center -expand 1 -fill both -side top
|
||||
pack $base.fb \
|
||||
-in .fdcmd -anchor center -expand 0 -fill none -side top
|
||||
pack $base.fb.b1 \
|
||||
-in .fdcmd.fb -anchor center -expand 0 -fill none -side left
|
||||
pack $base.fb.b2 \
|
||||
-in .fdcmd.fb -anchor center -expand 0 -fill none -side top
|
||||
}
|
||||
|
||||
proc vTclWindow.fdmenu {base} {
|
||||
if {$base == ""} {
|
||||
set base .fdmenu
|
||||
}
|
||||
if {[winfo exists $base]} {
|
||||
wm deiconify $base; return
|
||||
}
|
||||
###################
|
||||
# CREATING WIDGETS
|
||||
###################
|
||||
toplevel $base -class Toplevel
|
||||
wm focusmodel $base passive
|
||||
wm geometry $base 288x70+193+129
|
||||
wm maxsize $base 785 570
|
||||
wm minsize $base 1 1
|
||||
wm overrideredirect $base 0
|
||||
wm resizable $base 0 0
|
||||
wm deiconify $base
|
||||
wm title $base "Commands"
|
||||
button $base.but17 \
|
||||
-borderwidth 1 \
|
||||
-command {if {[tk_messageBox -title Warning -message "Delete all objects ?" -type yesno -default no]=="no"} return
|
||||
fd_init} \
|
||||
-font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -padx 9 \
|
||||
-pady 3 -text {Delete all}
|
||||
button $base.but18 \
|
||||
-borderwidth 1 -command {set fdvar(geometry) [wm geometry .fd] ; fd_test } \
|
||||
-font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -padx 9 \
|
||||
-pady 3 -text {Test form}
|
||||
button $base.but19 \
|
||||
-borderwidth 1 -command {destroy .$fdvar(forminame)} \
|
||||
-font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -padx 9 \
|
||||
-pady 3 -text {Close test form}
|
||||
button $base.bex \
|
||||
-borderwidth 1 \
|
||||
-command {if {[fd_save_form $fdvar(formname)]==1} {
|
||||
catch {Window destroy .fd}
|
||||
catch {Window destroy .fdtb}
|
||||
catch {Window destroy .fdmenu}
|
||||
catch {Window destroy .fda}
|
||||
catch {Window destroy .fdcmd}
|
||||
catch {Window destroy .$fdvar(forminame)}
|
||||
}} \
|
||||
-font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -padx 9 \
|
||||
-pady 3 -text Close
|
||||
button $base.bload \
|
||||
-borderwidth 1 -command {fd_load_form nimic design} \
|
||||
-font -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-* -padx 9 \
|
||||
-pady 3 -text {Load from database}
|
||||
button $base.button17 \
|
||||
-borderwidth 1 -command {fd_save_form nimic} \
|
||||
-font -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-* -padx 9 \
|
||||
-pady 3 -text Save
|
||||
label $base.l1 \
|
||||
-borderwidth 0 \
|
||||
-font -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-* \
|
||||
-text {Form name}
|
||||
entry $base.e1 \
|
||||
-background #fefefe -borderwidth 1 -highlightthickness 0 \
|
||||
-selectborderwidth 0 -textvariable fdvar(formname)
|
||||
label $base.l2 \
|
||||
-borderwidth 0 \
|
||||
-font -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-* \
|
||||
-text {Form's window internal name}
|
||||
entry $base.e2 \
|
||||
-background #fefefe -borderwidth 1 -highlightthickness 0 \
|
||||
-selectborderwidth 0 -textvariable fdvar(forminame)
|
||||
###################
|
||||
# SETTING GEOMETRY
|
||||
###################
|
||||
place $base.but17 \
|
||||
-x 5 -y 80 -width 62 -height 24 -anchor nw -bordermode ignore
|
||||
place $base.but18 \
|
||||
-x 5 -y 45 -width 62 -height 24 -anchor nw -bordermode ignore
|
||||
place $base.but19 \
|
||||
-x 70 -y 45 -width 94 -height 24 -anchor nw -bordermode ignore
|
||||
place $base.bex \
|
||||
-x 230 -y 45 -height 24 -anchor nw -bordermode ignore
|
||||
place $base.bload \
|
||||
-x 75 -y 80 -width 114 -height 23 -anchor nw -bordermode ignore
|
||||
place $base.button17 \
|
||||
-x 165 -y 45 -width 44 -height 24 -anchor nw -bordermode ignore
|
||||
place $base.l1 \
|
||||
-x 5 -y 5 -anchor nw -bordermode ignore
|
||||
place $base.e1 \
|
||||
-x 75 -y 5 -width 193 -height 17 -anchor nw -bordermode ignore
|
||||
place $base.l2 \
|
||||
-x 5 -y 25 -anchor nw -bordermode ignore
|
||||
place $base.e2 \
|
||||
-x 175 -y 25 -width 60 -height 17 -anchor nw -bordermode ignore
|
||||
}
|
||||
|
||||
proc vTclWindow.fdtb {base} {
|
||||
if {$base == ""} {
|
||||
set base .fdtb
|
||||
}
|
||||
if {[winfo exists $base]} {
|
||||
wm deiconify $base; return
|
||||
}
|
||||
###################
|
||||
# CREATING WIDGETS
|
||||
###################
|
||||
toplevel $base -class Toplevel
|
||||
wm focusmodel $base passive
|
||||
wm geometry $base 90x152+65+180
|
||||
wm maxsize $base 785 570
|
||||
wm minsize $base 1 1
|
||||
wm overrideredirect $base 0
|
||||
wm resizable $base 1 1
|
||||
wm deiconify $base
|
||||
wm title $base "Toolbar"
|
||||
radiobutton $base.rb1 \
|
||||
-anchor w -borderwidth 1 \
|
||||
-font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* \
|
||||
-highlightthickness 0 -text Point -value point -variable fdvar(tool) \
|
||||
-width 9
|
||||
radiobutton $base.rb2 \
|
||||
-anchor w -borderwidth 1 \
|
||||
-font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* \
|
||||
-foreground #000000 -highlightthickness 0 -selectcolor #0000ee \
|
||||
-text Label -value label -variable fdvar(tool) -width 9
|
||||
radiobutton $base.rb3 \
|
||||
-anchor w -borderwidth 1 \
|
||||
-font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* \
|
||||
-highlightthickness 0 -text Entry -value entry -variable fdvar(tool) \
|
||||
-width 9
|
||||
radiobutton $base.rb4 \
|
||||
-anchor w -borderwidth 1 \
|
||||
-font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* \
|
||||
-highlightthickness 0 -text Button -value button \
|
||||
-variable fdvar(tool) -width 9
|
||||
radiobutton $base.rb5 \
|
||||
-anchor w -borderwidth 1 \
|
||||
-font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* \
|
||||
-highlightthickness 0 -text {List box} -value listbox \
|
||||
-variable fdvar(tool) -width 9
|
||||
radiobutton $base.rb6 \
|
||||
-anchor w -borderwidth 1 \
|
||||
-font -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-* \
|
||||
-highlightthickness 0 -text {Check box} -value checkbox \
|
||||
-variable fdvar(tool) -width 9
|
||||
radiobutton $base.rb7 \
|
||||
-anchor w -borderwidth 1 \
|
||||
-font -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-* \
|
||||
-highlightthickness 0 -text {Radio btn} -value radio \
|
||||
-variable fdvar(tool) -width 9
|
||||
radiobutton $base.rb8 \
|
||||
-anchor w -borderwidth 1 \
|
||||
-font -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-* \
|
||||
-highlightthickness 0 -text Query -value query -variable fdvar(tool) \
|
||||
-width 9
|
||||
###################
|
||||
# SETTING GEOMETRY
|
||||
###################
|
||||
grid $base.rb1 \
|
||||
-in .fdtb -column 0 -row 0 -columnspan 1 -rowspan 1
|
||||
grid $base.rb2 \
|
||||
-in .fdtb -column 0 -row 1 -columnspan 1 -rowspan 1
|
||||
grid $base.rb3 \
|
||||
-in .fdtb -column 0 -row 2 -columnspan 1 -rowspan 1
|
||||
grid $base.rb4 \
|
||||
-in .fdtb -column 0 -row 3 -columnspan 1 -rowspan 1
|
||||
grid $base.rb5 \
|
||||
-in .fdtb -column 0 -row 4 -columnspan 1 -rowspan 1
|
||||
grid $base.rb6 \
|
||||
-in .fdtb -column 0 -row 5 -columnspan 1 -rowspan 1
|
||||
grid $base.rb7 \
|
||||
-in .fdtb -column 0 -row 6 -columnspan 1 -rowspan 1
|
||||
grid $base.rb8 \
|
||||
-in .fdtb -column 0 -row 7 -columnspan 1 -rowspan 1
|
||||
}
|
||||
|
||||
Window show .
|
||||
Window show .dw
|
||||
|
||||
|
45
src/bin/pgaccess/qbtclet.html
Normal file
45
src/bin/pgaccess/qbtclet.html
Normal file
@ -0,0 +1,45 @@
|
||||
<html>
|
||||
|
||||
<title> Visual Query Builder in Tcl/Tk </title>
|
||||
<body bgcolor=white>
|
||||
<h1> Visual Query Builder</h1>
|
||||
<hr>
|
||||
This visual query builder is included in <a href='http://www.flex.ro/pgaccess'>
|
||||
PgAccess</a>, a visual interface to
|
||||
<a href='http://www.postgreSQL.org'> PostgreSQL</a> written entirely in
|
||||
vTcl , (Visual Tcl).
|
||||
|
||||
|
||||
<p align="center">
|
||||
|
||||
<embed src="qbtclet.tcl" width=590 height=485>
|
||||
|
||||
</p>
|
||||
|
||||
<br>
|
||||
|
||||
|
||||
Visual Query Designer demo<br>
|
||||
Click <a href='qbtclet.tar.gz'>here</a> to download the source </a>
|
||||
created by Constantin Teodorescu with vTcl (visual Tcl), teo@flex.ro
|
||||
<hr>
|
||||
Facitilies<br>
|
||||
- drag and drop selection of fields<br>
|
||||
- drag and drop fields from a table to another do create links<br>
|
||||
- move table position by dragging<br>
|
||||
- point and click any link or table then press delete to delete them<br>
|
||||
- modify sort order by clicking on (unsorted)<br>
|
||||
- enter filter conditions as criteria (>2000 , ='item')<br>
|
||||
- easy panning of table and result panels<br>
|
||||
- show SQL command<br>
|
||||
<br>
|
||||
If you want to use it for your database, modify ql_read_struct in order to read
|
||||
your table structure.
|
||||
<br>
|
||||
Feel free to use, modify or copy this software for non-commercial purposes.<br>
|
||||
In any other case, please contact me.
|
||||
<br>
|
||||
FLEX Consulting Braila, ROMANIA is able to deliver high end interfaces
|
||||
and any other commercial products written in Tcl/Tk just like that you have seen.
|
||||
</body>
|
||||
</html>
|
Loading…
x
Reference in New Issue
Block a user