Login
Username:

Password:

Remember me



Lost Password?

Register now!

Sections

Who's Online
104 user(s) are online (51 user(s) are browsing Forums)

Members: 0
Guests: 104

more...

Headlines

 
  Register To Post  

Proaction but twice
Quite a regular
Quite a regular


See User information
So I'm in early stages regarding working (python) on Proaction. I was able to get a chooser (cycle gadget) into the layout, but with a second gadget of the same kind I do not get the contents in.

In more general terms, how should I debug Reaction/Intuition stuff? I tried using C first, but I just got system freezes from running the binary, all the time.

Here's the lines of code in question, first the one that seems to work:
Quote:

(rc,rc2,app.cycl0_gid) = arexx.dorexx("PROACTION","ADDGADGET GUIID " + guikey + " GADGETCLASS \"chooser.gadget\" TAGSTRING \"CHOOSER_DropDown,True,CHOOSER_Labels," + app.cycl0 + ",TAG_DONE\"")


Not (quite) working:
Quote:

(rc,rc2,app.cycl1_gid) = arexx.dorexx("PROACTION","ADDGADGET GUIID " + guikey + " GADGETCLASS \"chooser.gadget\" TAGSTRING \"CHOOSER,DropDown,True,CHOOSER_Labels," + app.cycl1 + ",TAG_DONE\"")

...
...
...
I hope the tabs are at least seemingly preserved (nope!)...
All of the lines (yes, a mashup of shipped examples):
Quote:

#!python

import sys
import os
import arexx

def ErrorExit(msg):
command = "RequestChoice TYPE \"ERROR\" \"" + sys.argv[0] + "\" \"" + msg + "\" \"OK\" >NIL:"
os.system(command)
exit()

def GetPorts():
try:
ports = os.getports()
ports = " ".join(ports)
except AttributeError:
(rc,rc2,ports) = arexx.dorexx("REXX","return show('P')")
if rc != 0:
ErrorExit("Couldn\'t find ARexx!")
return ports

def MakeChooserNodeList(guikey, *strings):
concstrings = []
# First we need an exec list to hold our ChooserNodes
# We create this with a special command NEWGUIOBJECT and specify an object
# of type GUIOBJ_List . An ID for the list object will be returned that
# we can use in all further operations on it.
(rc,rc2,cnlist) = arexx.dorexx("PROACTION","NEWGUIOBJECT GUIID " + guikey + " OBJECTTYPE \"GUIOBJ_List\"")
if rc == 0:
# Our function recives a tuple in the variable strings, which may consist of
# separate strings or lists of strings, depending on how we call it.
# We need a (python) list of strings so this next assembles that for us.
for string in strings:
if not isinstance(string,list):
concstrings.append(string)
else:
concstrings.extend(string)
# Now we process the list of strings we have
for string in concstrings:
cntags = ""
cntags += "CNA_Text," + str(string) + ","
cntags += "TAG_DONE"
# The command ALLOCCHOOSERNODE is a Wrapper for the
# AlloChooserNode() C function. It returns an ID for a
# GUIOBJ_Node Object which we can add to the
# growing choosernode list.

(rc,rc2,cn) = arexx.dorexx("PROACTION","ALLOCCHOOSERNODE GUIID " + guikey + " TAGSTRING \"" + cntags + "\"")
if rc == 0:
arexx.dorexx("PROACTION", "ADDTAIL GUIID " + guikey + " LISTID " + cnlist + " NODEID " + cn)
return cnlist

def FreeChooserNodeList(guikey, rbnlist):
# We remove each node in turn using the REMTAIL command.
(rc, rc2, rbn) = arexx.dorexx("PROACTION","REMTAIL GUIID " + guikey + " LISTID " + rbnlist)
while rc == 0:
# if successful we pass the NODEID to the FREECHOOSERNODE command.
arexx.dorexx("PROACTION","FREECHOOSERNODE GUIID " + guikey + " NODEID " + rbn)
# remove next node and loop.
(rc, rc2, rbn) = arexx.dorexx("PROACTION","REMTAIL GUIID " + guikey + " LISTID " + rbnlist)

ports = GetPorts()
if -1 == ports.find("PROACTION"):
os.system("RUN >\"T:proactionpid\" *>NIL: APPDIR:PROACTION")
os.system("C:WaitForPort PROACTION")
# Now check again
ports = GetPorts()
if -1 == ports.find("PROACTION"):
ErrorExit("Unable to start or find ProAction GUIServer")

class Application:

def __init__(self):
self.PORTNAME = "jkldba"
self.UNIQUE = True

# application specific strings
wititle = "something's up h"
cycl0 = ['hub','bub','dub']
cyclbl0 = "Choices for me"
cycl1 = ['atr','erc','rotterdim','ser','haa','iei','aqz','ppw','hji','frb']
cyclbl1 = "Choices for ya"

def HandleInput(pyport,guikey):

global app
die = 0
# main loop
while die == 0:
pyport.wait()
msg = pyport.getmsg()
# Loop until all messages are processed
while msg:
cmd = msg.msg
msg.reply()
if cmd == "QUIT":
die = 1
break
elif cmd[:5] == "CLOSE":
die = 1
break
msg = pyport.getmsg()

def DoGUI(pubscreen):

global app

# Setting up ARexx port
pyport = arexx.Port(app.PORTNAME)
if pyport:
if app.UNIQUE:
if pyport.name != app.PORTNAME:
ErrorExit("ARexx Port " + app.PORTNAME + " already exists!")

wintags = ""
wintags += "WA_Width,300,"
wintags += "WA_Height,400,"
wintags += "WA_DragBar,1,"
wintags += "WA_DepthGadget,1,"
wintags += "WA_SizeGadget,1,"
wintags += "WA_CloseGadget,1,"
wintags += "WA_Title,"+wititle+","
wintags += "WA_PubScreenFallBack,1,"
wintags += "WA_PubScreenName," + pubscreen + ","
wintags += "WINDOW_POSITION,WPOS_CENTERSCREEN,"
wintags += "WA_Activate,0,"
wintags += "TAG_DONE"

(rc,rc2,guikey) = arexx.dorexx("PROACTION","CREATEGUI PORTNAME " + pyport.name + " TAGSTRING \"" + wintags + "\"")
if rc == 0:
(rc,rc2,current_layout_gid) = arexx.dorexx("PROACTION","ADDLAYOUT GUIID " + guikey + " TAGSTRING LAYOUT_ORIENT_VERT,TAG_DONE")
app.pagesizelist = 1 # not GetPageSizeList()
# numlabels = len(app.pagesizelist)
app.cycl0 = MakeChooserNodeList(guikey,cycl0)
app.cycl1 = MakeChooserNodeList(guikey,cycl1)
if (app.cycl0 != None and app.cycl1 != None):
(rc,rc2,app.cycl0_gid) = arexx.dorexx("PROACTION","ADDGADGET GUIID " + guikey + " GADGETCLASS \"chooser.gadget\" TAGSTRING \"CHOOSER_DropDown,True,CHOOSER_Labels," + app.cycl0 + ",TAG_DONE\"")
# (rc,rc2,dummy) = arexx.dorexx("PROACTION","SETATTRS GUIID " + guikey + " OBJECTID " + current_layout_gid + " TAGSTRING \"LAYOUT_ModifyChild," + app.cycl0_gid + ",CHILD_Label," + cyclbl0 + ",TAG_DONE\"")
(rc,rc2,app.cycl1_gid) = arexx.dorexx("PROACTION","ADDGADGET GUIID " + guikey + " GADGETCLASS \"chooser.gadget\" TAGSTRING \"CHOOSER,DropDown,True,CHOOSER_Labels," + app.cycl1 + ",TAG_DONE\"")
(rc,rc2,result) = arexx.dorexx("PROACTION","ADDGADGET GUIID " + guikey + " GADGETCLASS \"listbrowser.gadget\" TAGSTRING \"TAG_DONE\"")
(rc,rc2,result) = arexx.dorexx("PROACTION","OPENGUIWINDOW GUIID " + guikey)
# main loop called here
HandleInput(pyport,guikey)
# First get window out of the way, then nodelist
arexx.dorexx("PROACTION","CLOSEGUIWINDOW GUIID " + guikey)
FreeChooserNodeList(guikey, app.cycl0)
FreeChooserNodeList(guikey, app.cycl1)
arexx.dorexx("PROACTION","DESTROYGUI GUIID " + guikey)
else:
ErrorExit("Could not create port!")

app = Application();
DoGUI("Workbench")


Edited by Thematic on 2021/1/6 20:11:51
Go to top

  Register To Post

 




Currently Active Users Viewing This Thread: 1 ( 0 members and 1 Anonymous Users )




Powered by XOOPS 2.0 © 2001-2023 The XOOPS Project