Re: Request for app development feedback/help

2019-10-22 Thread C K Kashyap
Thank you so much Beneroth for the detailed explanation. It will help a lot

Re: Request for app development feedback/help

2019-10-22 Thread andreas

Hi Kashyap

Familiarizing with the concept of prolog might help, but studying prolog 
in detail might just add to the confusion, as prolog uses a quite 
different syntax than pilog (which is embedded into picolisp, but kinda 
it's own language).


You posted a select query, it is likely the most complex pilog 
predicate, but also likely the most used when working with picolisp 
database. In the reference is a document just about select: 
https://software-lab.de/doc/select.html

(it is in @doc/ within your picolisp directory).

At the top comes the picolisp function (?) which executes the pilog 
query it gets via arguments.



(?
(?) is interactive, so handy in the REPL, but in code you usually want 
to use (pilog) or (solve).

(solve) is kinda like (collect) as it produces a list of results.
(pilog) is like (iter), as you can hand it a function to map over the 
results, e.g. changing database records according to some pilog query.


The important detail here is that the picolisp pilog-interface-functions 
(?, pilog, solve, query and prove) handle their arguments differently, 
some expect directly a pilog-query (no quoted), some expect a quoted 
pilog query (so instead of a quoted hardcoded query it could be a 
picolisp function returning the query).
This confused me at first. Read the reference carefully and then you see 
the different usages and intentions.


In the function list at the end of the reference 
you have the pilog section, it 
contains a mix of picolisp functions (mostly the ones without a / in the 
name) and pilog predicates and statements.
Be careful to see if a piece of code is pilog and belongs into a pilog 
query,

or if its picolisp code working with a pilog query.

E.g. (goal) and (fail) are picolisp helper functions to construct a 
pilog query (e.g. to generate a query from code, instead of hardcoding it).


Then comes a (optional) listing of pilog unification variables (aka: 
parameter bindings).
Most picolisp pilog-interface functions take those as the first 
argument(s), some expect to be part of the quoted list handed to them. 
Strictly speaking they are not pilog and not exactly part of the pilog 
query, but binding the parameters for use within pilog interpreter.


Remember: pilog is an interpreter running inside the picolisp 
interpreter, and it has not automatic access to picolisp variables. You 
have to bind the variables as such pilog parameters, or dynamically run 
picolisp code within the prolog interpreter: "When the CAR of a Pilog 
clause is the symbol |^|, then the CDDR is executed as a Lisp |prg| body 
and the result unified with the CADR". See the last part of the "Pilog 
(PicoLisp Prolog)" <"Pilog (PicoLisp Prolog)"> chapter in the ref, means 
^ is not a function, but a read-macro for the pilog interpreter!


The "unification variables" are rather easy, despite the unwieldy words:
Rule 1: pilog variables have to start with @, e.g. @Nr.
Rule 2: pilog variables never change their value. Because pilog (prolog) 
does not execute statements, but finding solutions to a bunch of 
"facts". Using the "unification variables" we define some fixed facts by 
setting those pilog variables to picolisp values ("unifying" the pilog 
variables with the picolisp environment).


Apart from that, it is just like the variable list in a (let):
@pilog-variable-to-set 


@Nr (and *CuSuNr (cons @ T))
Set @Nr to: if picolisp variable *CuSuNr is NIL, to NIL, else to (cons 
*CuSuNr T).

So @Nr is NIL or e.g. (45123 . T)


@Nm *CuSuNm
@Tel *CuSuTel
@Plz *CuSuPlz
@Ort *CuSuOrt
@Mob *CuSuMob
Easy, just setting the @pilog-variable to the value of the picolisp 
variable.


After the "unification variables" (or pilog query parameters, as I would 
call it),
comes the pilog query. Here a select/3 is used. Don't forget to read the 
dedicated reference! 



(select (@@)
The first argument to our select query is (@@), again list of 
unification variables, but this time the unification variables which 
should be communicated from the pilog environment back to the picolisp 
environment.
So basically a kind of return values, just a list of pilog variables we 
like to get returned, nothing more.

These are pilog variables, so all elements must start with @.
Often you need only one, then it is kind of habit to use the iconic 
variable name @@.



((nr +CuSu @Nr) (nm +CuSu @Nm) (tel +CuSu @Tel)
            (plz +CuSu @Plz) (ort +CuSu @Ort) (mob +CuSu @Mob) )
After the list of unification variables, selects wants a list of 
"generator clauses".

This is a list, therefore one pair of parentheses around the whole thing ;-)
Within this list, we may have one or more generator clauses, which are 
again written as lists itself.

(Pilog has really many parens).

A generator clause can be very short and easy, but also long and funny :-D
Check out the "Generator clauses" section in the select predicate 
reference 

Re: Request for app development feedback/help

2019-10-21 Thread C K Kashyap
Thanks Alex,
So, would you suggest that I familiarize myself with prolog before
venturing deeper into app development in picolisp?
I think it will be helpful for me if I could get an english translation of
this?
(?
  @Nr (and *CuSuNr (cons @ T))
  @Nm *CuSuNm
  @Tel *CuSuTel
  @Plz *CuSuPlz
  @Ort *CuSuOrt
  @Mob *CuSuMob
  (select (@@)
 ((nr +CuSu @Nr) (nm +CuSu @Nm) (tel +CuSu @Tel)
(plz +CuSu @Plz) (ort +CuSu @Ort) (mob +CuSu @Mob) )
 (range @Nr @@ nr)
 (tolr @Nm @@ nm)
 (fold @Tel @@ tel)
 (head @Plz @@ plz)
 (part @Ort @@ ort)
 (fold @Mob @@ mob) ) )

Regards,
Kashyap

On Mon, Oct 21, 2019 at 10:00 AM Alexander Burger 
wrote:

> On Mon, Oct 21, 2019 at 07:12:32AM -0700, C K Kashyap wrote:
> > Finally - its good to see the values :) ... I used (show @@).
> > I see, so @@ is just a "variable" introduced in the select function - i
> got
> > a little confused by (@@) - I thought it was a function call - but looks
> > like select takes the argument unevaluated :) (love the (vi 'select) )
>
> We cannot talk about "evaluation" in Pilog, as this is no Lisp despite it
> uses
> s-expressions.
>
> It is all about "unification", i.e. values are matched with patterns
> containing
> variables. And a variable is recognized by Pilog because it starts with
> "@". In
> real Prolog variables are recognized because they start with an uppercase
> letter.
>
>
> > I noticed that the variable name has to start with @ - It does not work
> if
> > I use a name without @ - why is that?
>
> Exactly. This is how Prolog works. Perhaps you may want to look at some
> intro
> like https://www.metalevel.at/prolog - Prolog is a beast very different
> from
> other languages.
>
>
> Also, I noticed that functions in the
> > form library have their parameter names in the string format (for
> example (de
> > form ("Attr" . "Prg")) - I am curious about that too.
>
> These are transient symbols used for privacy. See
> https://software-lab.de/doc/faq.html#problems
>
> ☺/ A!ex
>
> --
> UNSUBSCRIBE: mailto:picolisp@software-lab.de?subject=Unsubscribe
>


Re: Request for app development feedback/help

2019-10-21 Thread Alexander Burger
On Mon, Oct 21, 2019 at 07:12:32AM -0700, C K Kashyap wrote:
> Finally - its good to see the values :) ... I used (show @@).
> I see, so @@ is just a "variable" introduced in the select function - i got
> a little confused by (@@) - I thought it was a function call - but looks
> like select takes the argument unevaluated :) (love the (vi 'select) )

We cannot talk about "evaluation" in Pilog, as this is no Lisp despite it uses
s-expressions.

It is all about "unification", i.e. values are matched with patterns containing
variables. And a variable is recognized by Pilog because it starts with "@". In
real Prolog variables are recognized because they start with an uppercase
letter.


> I noticed that the variable name has to start with @ - It does not work if
> I use a name without @ - why is that?

Exactly. This is how Prolog works. Perhaps you may want to look at some intro
like https://www.metalevel.at/prolog - Prolog is a beast very different from
other languages.


Also, I noticed that functions in the
> form library have their parameter names in the string format (for example (de
> form ("Attr" . "Prg")) - I am curious about that too.

These are transient symbols used for privacy. See
https://software-lab.de/doc/faq.html#problems

☺/ A!ex

-- 
UNSUBSCRIBE: mailto:picolisp@software-lab.de?subject=Unsubscribe


Re: Request for app development feedback/help

2019-10-21 Thread C K Kashyap
Finally - its good to see the values :) ... I used (show @@).
I see, so @@ is just a "variable" introduced in the select function - i got
a little confused by (@@) - I thought it was a function call - but looks
like select takes the argument unevaluated :) (love the (vi 'select) )

I noticed that the variable name has to start with @ - It does not work if
I use a name without @ - why is that? Also, I noticed that functions in the
form library have their parameter names in the string format (for example (de
form ("Attr" . "Prg")) - I am curious about that too.

Regards,
Kashyap






On Mon, Oct 21, 2019 at 6:42 AM Alexander Burger 
wrote:

> On Mon, Oct 21, 2019 at 06:16:41AM -0700, C K Kashyap wrote:
> > Thank you Alex,
> > I get the following when I run the (?) - for which I defined a function
> XX.
>
> Good.
>
> > I do see that I get back 1 record when *CuSuNm is "Oaks" and 3 records
> when
> > *CuSuNm is "". However, I don't see the actual values - except for @Nm.
>
> >  @Nr=NIL @Nm="Oaks" @Tel=NIL @Plz=NIL @Ort=NIL @Mob=NIL @@={C2}
>
> Yes. '?' shows all unified Pilog variables. As the object is bound to
> '@@', we
> see '{C2}' but that's not so very helpful.
>
> You can use the 'show' predicate to view them:
>
>: (? ... (select (@@) ...) (show @@))
>
> or pick individual properties
>
>: (? ... (select (@@) ...) (val @Nm @@ nm) (val @Tel @@ tel))
>
> then '@Nm' and '@Tel' will be unified to the proper values and shown in the
> results.
>
>
> > While at it, could you also explain the @/@@ convention? Is there a doc I
> > could read for this?
>
> '@@' is just the implicit variable used in the GUI. Outside of GUI usage
> you can
> use any name, e.g.
>
>: (? ... (select (@CuSu) ...
>
> ☺/ A!ex
>
> --
> UNSUBSCRIBE: mailto:picolisp@software-lab.de?subject=Unsubscribe
>


Re: Request for app development feedback/help

2019-10-21 Thread Alexander Burger
On Mon, Oct 21, 2019 at 06:16:41AM -0700, C K Kashyap wrote:
> Thank you Alex,
> I get the following when I run the (?) - for which I defined a function XX.

Good.

> I do see that I get back 1 record when *CuSuNm is "Oaks" and 3 records when
> *CuSuNm is "". However, I don't see the actual values - except for @Nm.

>  @Nr=NIL @Nm="Oaks" @Tel=NIL @Plz=NIL @Ort=NIL @Mob=NIL @@={C2}

Yes. '?' shows all unified Pilog variables. As the object is bound to '@@', we
see '{C2}' but that's not so very helpful.

You can use the 'show' predicate to view them:

   : (? ... (select (@@) ...) (show @@))

or pick individual properties

   : (? ... (select (@@) ...) (val @Nm @@ nm) (val @Tel @@ tel))

then '@Nm' and '@Tel' will be unified to the proper values and shown in the
results.


> While at it, could you also explain the @/@@ convention? Is there a doc I
> could read for this?

'@@' is just the implicit variable used in the GUI. Outside of GUI usage you can
use any name, e.g.

   : (? ... (select (@CuSu) ...

☺/ A!ex

-- 
UNSUBSCRIBE: mailto:picolisp@software-lab.de?subject=Unsubscribe


Re: Request for app development feedback/help

2019-10-21 Thread C K Kashyap
Thank you Alex,
I get the following when I run the (?) - for which I defined a function XX.
I do see that I get back 1 record when *CuSuNm is "Oaks" and 3 records when
*CuSuNm is "". However, I don't see the actual values - except for @Nm.
While at it, could you also explain the @/@@ convention? Is there a doc I
could read for this?

: (setq *CuSuNm "Oaks")

-> "Oaks"

: (XX)

 @Nr=NIL @Nm="Oaks" @Tel=NIL @Plz=NIL @Ort=NIL @Mob=NIL @@={C2}

-> NIL

: (setq *CuSuNm "")

-> NIL

: (XX)

 @Nr=NIL @Nm=NIL @Tel=NIL @Plz=NIL @Ort=NIL @Mob=NIL @@={C1}

 @Nr=NIL @Nm=NIL @Tel=NIL @Plz=NIL @Ort=NIL @Mob=NIL @@={C2}

 @Nr=NIL @Nm=NIL @Tel=NIL @Plz=NIL @Ort=NIL @Mob=NIL @@={C3}

-> NIL

:

Regards,
Kashyap

On Mon, Oct 21, 2019 at 4:09 AM Alexander Burger 
wrote:

> Hi Kashyap,
>
> > While I see the big pieces based on the description given in
> doc/app.html,
> > I need some help understanding the Pilog queries.
> >
> > I think I can make progress if I could figure out how to run the pilog
> > queries in the sample app on the REPL. For example, how can I run the
> pilog
> > query in the choOrd function in app/gui.l.
>
> The easiest is to use the '?' function to test Pilog queries interactively.
>
> For example, after setting some globals, eg.
>
>: (setq *CuSuNm "Oaks")
>
> you can paste the whole query
>
>: (?
>   @Nr (and *CuSuNr (cons @ T))
>   @Nm *CuSuNm
>   @Tel *CuSuTel
>   @Plz *CuSuPlz
>   @Ort *CuSuOrt
>   @Mob *CuSuMob
>   (select (@@)
>  ((nr +CuSu @Nr) (nm +CuSu @Nm) (tel +CuSu @Tel)
> (plz +CuSu @Plz) (ort +CuSu @Ort) (mob +CuSu @Mob) )
>  (range @Nr @@ nr)
>  (tolr @Nm @@ nm)
>  (fold @Tel @@ tel)
>  (head @Plz @@ plz)
>  (part @Ort @@ ort)
>  (fold @Mob @@ mob) ) )
>
> and then step through the results with .
>
> ☺/ A!ex
>
> --
> UNSUBSCRIBE: mailto:picolisp@software-lab.de?subject=Unsubscribe
>


Re: Request for app development feedback/help

2019-10-21 Thread Alexander Burger
Hi Kashyap,

> While I see the big pieces based on the description given in doc/app.html,
> I need some help understanding the Pilog queries.
> 
> I think I can make progress if I could figure out how to run the pilog
> queries in the sample app on the REPL. For example, how can I run the pilog
> query in the choOrd function in app/gui.l.

The easiest is to use the '?' function to test Pilog queries interactively.

For example, after setting some globals, eg.

   : (setq *CuSuNm "Oaks")

you can paste the whole query

   : (?
  @Nr (and *CuSuNr (cons @ T))
  @Nm *CuSuNm
  @Tel *CuSuTel
  @Plz *CuSuPlz
  @Ort *CuSuOrt
  @Mob *CuSuMob
  (select (@@)
 ((nr +CuSu @Nr) (nm +CuSu @Nm) (tel +CuSu @Tel)
(plz +CuSu @Plz) (ort +CuSu @Ort) (mob +CuSu @Mob) )
 (range @Nr @@ nr)
 (tolr @Nm @@ nm)
 (fold @Tel @@ tel)
 (head @Plz @@ plz)
 (part @Ort @@ ort)
 (fold @Mob @@ mob) ) )

and then step through the results with .

☺/ A!ex

-- 
UNSUBSCRIBE: mailto:picolisp@software-lab.de?subject=Unsubscribe


Re: Request for app development feedback/help

2019-10-20 Thread George Orais
 Hi Kashyap,
Nice works you did! I'm also learning Pil from reading all these threads.
About your question, does debugging help? Like putting a break point?
Also, what I was thinking recently is, would it be nice if there is a PilDB GUI 
Browser? Just like the DB Browser for SQLite?

BR,GeoOn Monday, 21 October 2019, 08:55:59 am GMT+9, C K Kashyap 
 wrote:  
 
 Hi Alex,It seems the advice of studying the sample app (part of the picolisp 
distribution) is a good idea :)
While I see the big pieces based on the description given in doc/app.html, I 
need some help understanding the Pilog queries.
I think I can make progress if I could figure out how to run the pilog queries 
in the sample app on the REPL. For example, how can I run the pilog query in 
the choOrd function in app/gui.l. It will help me see what the returned values 
are and how QueryChart uses them to render.
regards,Kashyap


On Thu, Sep 12, 2019 at 8:32 AM C K Kashyap  wrote:

Thanks Alex,
I'll keep those tips in mind while I go over the app/er.l .. I'll revert if I 
have more questions (I have a feeling I will :) )Regards,Kashyap

On Wed, Sep 11, 2019 at 10:25 PM Alexander Burger  wrote:

Hi Kashyap,

> I'll take a look at app/gui.l

Yes, I think it is a very typical example. In general, I would say that search
dialogs are *the* central issue.

Whenever I add a new entity class to an application, I first think about how
objects of that entity will be needed to be searched at runtime, and then do
three things:

   1. Add the class definition with proper index and joint relations to the E/R
      file.
   2. Write a search dialog allowing
      — the search for such objects with the right filter criteria
      — srcolling through the list of results in a chart
      — clicking on "@" in the result list to either
         — jump to the edit form of that object, or
         — take that object and insert into the context of another form
      — pressing a "New" button to make a new object if nothing useful found
   3. Write an edit form for such objects.


> Is there some documentation you could point me to for the format of the
> value in url> ?

Not that I'm aware of it. This method returns a a list to the path to the
standard edit form for that class, and further arguments, by convention passing
the object in the '*ID' global and the initial tab in the '*Tab' global if
desired:

   (dm url> (Tab)
     (and (may Customer) (list "app/cusu.l"  '*Tab Tab  '*ID This)) )

The (may ...) expression is for permission check. In general 'url>' returns NIL
if the object is not editable.

☺/ A!ex

-- 
UNSUBSCRIBE: mailto:picolisp@software-lab.de?subject=Unsubscribe


  

Re: Request for app development feedback/help

2019-10-20 Thread C K Kashyap
Hi Alex,
It seems the advice of studying the sample app (part of the picolisp
distribution) is a good idea :)

While I see the big pieces based on the description given in doc/app.html,
I need some help understanding the Pilog queries.

I think I can make progress if I could figure out how to run the pilog
queries in the sample app on the REPL. For example, how can I run the pilog
query in the choOrd function in app/gui.l. It will help me see what the
returned values are and how QueryChart uses them to render.

regards,
Kashyap



On Thu, Sep 12, 2019 at 8:32 AM C K Kashyap  wrote:

> Thanks Alex,
> I'll keep those tips in mind while I go over the app/er.l ... I'll revert
> if I have more questions (I have a feeling I will :) )
> Regards,
> Kashyap
>
>
> On Wed, Sep 11, 2019 at 10:25 PM Alexander Burger 
> wrote:
>
>> Hi Kashyap,
>>
>> > I'll take a look at app/gui.l
>>
>> Yes, I think it is a very typical example. In general, I would say that
>> search
>> dialogs are *the* central issue.
>>
>> Whenever I add a new entity class to an application, I first think about
>> how
>> objects of that entity will be needed to be searched at runtime, and then
>> do
>> three things:
>>
>>1. Add the class definition with proper index and joint relations to
>> the E/R
>>   file.
>>2. Write a search dialog allowing
>>   — the search for such objects with the right filter criteria
>>   — srcolling through the list of results in a chart
>>   — clicking on "@" in the result list to either
>>  — jump to the edit form of that object, or
>>  — take that object and insert into the context of another form
>>   — pressing a "New" button to make a new object if nothing useful
>> found
>>3. Write an edit form for such objects.
>>
>>
>> > Is there some documentation you could point me to for the format of the
>> > value in url> ?
>>
>> Not that I'm aware of it. This method returns a a list to the path to the
>> standard edit form for that class, and further arguments, by convention
>> passing
>> the object in the '*ID' global and the initial tab in the '*Tab' global if
>> desired:
>>
>>(dm url> (Tab)
>>  (and (may Customer) (list "app/cusu.l"  '*Tab Tab  '*ID This)) )
>>
>> The (may ...) expression is for permission check. In general 'url>'
>> returns NIL
>> if the object is not editable.
>>
>> ☺/ A!ex
>>
>> --
>> UNSUBSCRIBE: mailto:picolisp@software-lab.de?subject=Unsubscribe
>>
>


Re: Request for app development feedback/help

2019-09-12 Thread C K Kashyap
Thanks Alex,
I'll keep those tips in mind while I go over the app/er.l ... I'll revert
if I have more questions (I have a feeling I will :) )
Regards,
Kashyap


On Wed, Sep 11, 2019 at 10:25 PM Alexander Burger 
wrote:

> Hi Kashyap,
>
> > I'll take a look at app/gui.l
>
> Yes, I think it is a very typical example. In general, I would say that
> search
> dialogs are *the* central issue.
>
> Whenever I add a new entity class to an application, I first think about
> how
> objects of that entity will be needed to be searched at runtime, and then
> do
> three things:
>
>1. Add the class definition with proper index and joint relations to
> the E/R
>   file.
>2. Write a search dialog allowing
>   — the search for such objects with the right filter criteria
>   — srcolling through the list of results in a chart
>   — clicking on "@" in the result list to either
>  — jump to the edit form of that object, or
>  — take that object and insert into the context of another form
>   — pressing a "New" button to make a new object if nothing useful
> found
>3. Write an edit form for such objects.
>
>
> > Is there some documentation you could point me to for the format of the
> > value in url> ?
>
> Not that I'm aware of it. This method returns a a list to the path to the
> standard edit form for that class, and further arguments, by convention
> passing
> the object in the '*ID' global and the initial tab in the '*Tab' global if
> desired:
>
>(dm url> (Tab)
>  (and (may Customer) (list "app/cusu.l"  '*Tab Tab  '*ID This)) )
>
> The (may ...) expression is for permission check. In general 'url>'
> returns NIL
> if the object is not editable.
>
> ☺/ A!ex
>
> --
> UNSUBSCRIBE: mailto:picolisp@software-lab.de?subject=Unsubscribe
>


Re: Request for app development feedback/help

2019-09-11 Thread Alexander Burger
Hi Kashyap,

> I'll take a look at app/gui.l

Yes, I think it is a very typical example. In general, I would say that search
dialogs are *the* central issue.

Whenever I add a new entity class to an application, I first think about how
objects of that entity will be needed to be searched at runtime, and then do
three things:

   1. Add the class definition with proper index and joint relations to the E/R
  file.
   2. Write a search dialog allowing
  — the search for such objects with the right filter criteria
  — srcolling through the list of results in a chart
  — clicking on "@" in the result list to either
 — jump to the edit form of that object, or
 — take that object and insert into the context of another form
  — pressing a "New" button to make a new object if nothing useful found
   3. Write an edit form for such objects.


> Is there some documentation you could point me to for the format of the
> value in url> ?

Not that I'm aware of it. This method returns a a list to the path to the
standard edit form for that class, and further arguments, by convention passing
the object in the '*ID' global and the initial tab in the '*Tab' global if
desired:

   (dm url> (Tab)
 (and (may Customer) (list "app/cusu.l"  '*Tab Tab  '*ID This)) )

The (may ...) expression is for permission check. In general 'url>' returns NIL
if the object is not editable.

☺/ A!ex

-- 
UNSUBSCRIBE: mailto:picolisp@software-lab.de?subject=Unsubscribe


Re: Request for app development feedback/help

2019-09-11 Thread C K Kashyap
Thanks Alex,
I'll take a look at app/gui.l
Is there some documentation you could point me to for the format of the
value in url> ?

About updates - I mean, each Task would have "one to many" relation with
update entries. I was looking for some sample there.

Regards,
Kashyap



On Wed, Sep 11, 2019 at 12:23 PM Alexander Burger 
wrote:

> Hi Kashyap,
>
> > I've made some progress with todo app -
>
> Congratulation! :)
>
>
> > 1. I'd like to change this so that the main page only has the list of
> tasks
> > and when I click on a task it takes me to the task from where I can
> > enter/edit data.
>
> This is typically a search dialog, which is presented before the actual
> input
> form is displayed. The minDbGui example omitted a dedicated search dialog
> and
> instead put it all into the form. Examples for search dialogs are e.g. in
> app/gui.l (choSal, choCuSu, choItem, choOrd).
>
>
> > Simply changing line 66 to (gui 1 '(+ObjView +Textfield)
> > '(: nm)) and adding a url> method did not seem to do the trick.
>
> Yes, this should be possible, if you let url> point to such a form (i.e. a
> form
> for a single +Task object).
>
>
> > 2. I'd like to add the capability to write updates to a task. So
> > essentially, I think I need to have a (+List +Joint) but cant seem to get
> > it to work.
>
> Hmm, what kind of updates do you mean? As far as I see, changes seem to be
> written to disk properly.
>
> ☺/ A!ex
>
> --
> UNSUBSCRIBE: mailto:picolisp@software-lab.de?subject=Unsubscribe
>


Re: Request for app development feedback/help

2019-09-11 Thread Alexander Burger
Hi Kashyap,

> I've made some progress with todo app -

Congratulation! :)


> 1. I'd like to change this so that the main page only has the list of tasks
> and when I click on a task it takes me to the task from where I can
> enter/edit data.

This is typically a search dialog, which is presented before the actual input
form is displayed. The minDbGui example omitted a dedicated search dialog and
instead put it all into the form. Examples for search dialogs are e.g. in
app/gui.l (choSal, choCuSu, choItem, choOrd).


> Simply changing line 66 to (gui 1 '(+ObjView +Textfield)
> '(: nm)) and adding a url> method did not seem to do the trick.

Yes, this should be possible, if you let url> point to such a form (i.e. a form
for a single +Task object).


> 2. I'd like to add the capability to write updates to a task. So
> essentially, I think I need to have a (+List +Joint) but cant seem to get
> it to work.

Hmm, what kind of updates do you mean? As far as I see, changes seem to be
written to disk properly.

☺/ A!ex

-- 
UNSUBSCRIBE: mailto:picolisp@software-lab.de?subject=Unsubscribe