Re: Unified libraries to allow porting code to other oses
- Posted by jmduro May 24, 2015
- 2704 views
I think I understand. Something like set(object id, sequence property, object value). I don't understand how your "pretty simple" line works.
With my classes library, I would have to define a lot of classes, one per widget, defines all its methods and properties and create functions that instantiate that object like I did in my Database Visual Control Library. That is to say one source file per widget.
Here is an example of the way I create my own objects:
include constants.e include myLibs\myDebug.e include myLibs\myFile.e include myLibs\classes.e global constant dbmemo_MLE = 1, dbmemo_RICHEDIT = 2 ------------------------------------------------------------------------------ procedure onChange(integer self, integer event, sequence params) integer dbmemo, table dbmemo = findComponentEntity(self) if dbmemo > 0 then table = getEntityProperty(dbmemo, dbmemo_TABLE) void = callEntityMethod(dbmemo, table, tableUpdate, getText(self)) end if end procedure ------------------------------------------------------------------------------ -- params = {id,text,type,table} global function dbmemoCreate(integer parent, integer x, integer y, integer w, integer h, integer memoType, integer table, sequence field) integer dbmemo, id dbmemo = createEntity(TDBMemo) if memoType = dbmemo_MLE then id = createEx( MleText, "", parent, x, y, w, h, w32or_all({ES_AUTOVSCROLL,WS_VSCROLL}), 0 ) elsif memoType = dbmemo_RICHEDIT then id = createEx( RichEdit, "", parent, x, y, w, h, w32or_all({ES_NOHIDESEL,ES_AUTOHSCROLL,WS_HSCROLL}), 0 ) end if setEntityProperty(dbmemo, dbmemo_ID, id) setEntityProperty(dbmemo, dbmemo_TYPE, memoType) setEntityProperty(dbmemo, dbmemo_TEXT, "") setEntityProperty(dbmemo, dbmemo_TABLE, table) setEntityProperty(dbmemo, dbmemo_FIELD, field) void = callEntityMethod(dbmemo, table, tableSetLink, {}) setHandler(id, w32HChange, routine_id("onChange")) return dbmemo end function ------------------------------------------------------------------------------ -- empty control text -- params = {} function dbmemoClean(integer sender, integer dbmemo, object params) integer id id = getEntityProperty(dbmemo, dbmemo_ID) setText(id, "") return 0 end function ------------------------------------------------------------------------------ -- update control text according to its type -- yet, I don't see any need to differentiate MLE and RichEdit -- params = {content} function Update(integer sender, integer dbmemo, object params) integer id id = getEntityProperty(dbmemo, dbmemo_ID) void = enableHandler(id, w32HChange, routine_id("onChange"), 0) setText(id, params) setEntityProperty(dbmemo, dbmemo_TEXT, params) void = enableHandler(id, w32HChange, routine_id("onChange"), 1) return 0 end function ------------------------------------------------------------------------------ -- show control -- params = {} function Show(integer sender, integer dbmemo, object params) integer id id = getEntityProperty(dbmemo, dbmemo_ID) setVisible(id, w32True) return 0 end function ------------------------------------------------------------------------------ -- hide control -- params = {} function Hide(integer sender, integer dbmemo, object params) integer id id = getEntityProperty(dbmemo, dbmemo_ID) setVisible(id, w32False) return 0 end function ------------------------------------------------------------------------------ TDBMemo = defineClass("TDBMemo") dbmemo_ID = defineClassProperty(TDBMemo, "id", 0) dbmemo_TEXT = defineClassProperty(TDBMemo, "text", "") dbmemo_TYPE = defineClassProperty(TDBMemo, "type", "") dbmemo_TABLE = defineClassProperty(TDBMemo, "table", 0) dbmemo_FIELD = defineClassProperty(TDBMemo, "field", "") dbmemoUpdate = defineClassMethod(TDBMemo, "Update", routine_id("Update")) dbmemoShow = defineClassMethod(TDBMemo, "Show", routine_id("Show")) dbmemoHide = defineClassMethod(TDBMemo, "Hide", routine_id("Hide"))
And the way it is called:
textField = dbtextCreate( Win, -- parent 100, -- x position 62, -- y position 148, -- width 20, -- height ALIGN_LEFT, -- align table, -- table "field2" -- field )
The way to call a method is as follows:
void = callEntityMethod(0, table, tableGoFirst, {})
Regards
Jean-Marc