if(type.type == normalClass || type.type == noHeadClass || type.type == structClass)
{
- prop.Set(object, value);
+ ((void (*)(void *, void *))(void *)prop.Set)(object, value);
}
// TOFIX: How to swiftly handle classes with base data type?
else if(type == class(double) || !strcmp(type.dataTypeString, "double"))
// TOFIX: How to swiftly handle classes with base data type?
else if(type == class(double) || !strcmp(type.dataTypeString, "double"))
{
- double d = ((double(*)())(void *)prop.Get)(object);
+ double d = ((double(*)(void *))(void *)prop.Get)(object);
return d;
}
else if(type == class(float) || !strcmp(type.dataTypeString, "float"))
{
- float f =((float(*)())(void *)prop.Get)(object);
+ float f =((float(*)(void *))(void *)prop.Get)(object);
return f;
}
else if(type.typeSize == sizeof(int64))// || !strcmp(type.dataTypeString, "int64") || !strcmp(type.dataTypeString, "unsigned int64") || !strcmp(type.dataTypeString, "uint64"))
{
- return ((int64(*)())(void *)prop.Get)(object);
+ return ((int64(*)(void *))(void *)prop.Get)(object);
}
else if(type.typeSize == sizeof(int))// || !strcmp(type.dataTypeString, "int") || !strcmp(type.dataTypeString, "unsigned int") || !strcmp(type.dataTypeString, "uint"))
{
- return ((int(*)())(void *)prop.Get)(object);
+ return ((int(*)(void *))(void *)prop.Get)(object);
}
else if(type.typeSize == sizeof(short int)) // || !strcmp(type.dataTypeString, "short") || !strcmp(type.dataTypeString, "unsigned short") || !strcmp(type.dataTypeString, "uint16") || !strcmp(type.dataTypeString, "int16"))
{
- return ((short(*)())(void *)prop.Get)(object);
+ return ((short(*)(void *))(void *)prop.Get)(object);
}
else if(type.typeSize == sizeof(byte))// || !strcmp(type.dataTypeString, "char") || !strcmp(type.dataTypeString, "unsigned char") || !strcmp(type.dataTypeString, "byte"))
{
- return ((byte(*)())(void *)prop.Get)(object);
+ return ((byte(*)(void *))(void *)prop.Get)(object);
}
else
{
- return prop.Get(object);
+ return ((int (*)(void *))(void *)prop.Get)(object);
}
}
else
if(type.type == structClass)
{
void * propData = new0 byte[type.structSize];
- prop.Get(src, propData);
- prop.Set(dest, propData);
+ ((void (*)(void *, void *))(void *)prop.Get)(src, propData);
+ ((void (*)(void *, void *))(void *)prop.Set)(dest, propData);
delete propData;
}
else if(type.type == normalClass || type.type == noHeadClass)
{
// TOCHECK: Why was there a return here?
- /*return */prop.Set(dest, ((void*(*)())(void *)prop.Get)(src));
+ /*return */((void (*)(void *, void *))(void *)prop.Set)(dest, ((void*(*)(void *))(void *)prop.Get)(src));
}
// TOFIX: How to swiftly handle classes with base data type?
else if(type == class(double) || !strcmp(type.dataTypeString, "double"))
{
- ((void (*)(void *, double))(void *)prop.Set)(dest, ((double(*)())(void *)prop.Get)(src));
+ ((void (*)(void *, double))(void *)prop.Set)(dest, ((double(*)(void *))(void *)prop.Get)(src));
}
else if(type == class(float) || !strcmp(type.dataTypeString, "float"))
{
- ((void (*)(void *, float))(void *)prop.Set)(dest, ((float(*)())(void *)prop.Get)(src));
+ ((void (*)(void *, float))(void *)prop.Set)(dest, ((float(*)(void *))(void *)prop.Get)(src));
}
else if(type.typeSize == sizeof(int64))// || !strcmp(type.dataTypeString, "int64") || !strcmp(type.dataTypeString, "unsigned int64") || !strcmp(type.dataTypeString, "uint64"))
{
- ((void (*)(void *, int64))(void *)prop.Set)(dest, ((int64(*)())(void *)prop.Get)(src));
+ ((void (*)(void *, int64))(void *)prop.Set)(dest, ((int64(*)(void *))(void *)prop.Get)(src));
}
else if(type.typeSize == sizeof(int))// || !strcmp(type.dataTypeString, "int") || !strcmp(type.dataTypeString, "unsigned int") || !strcmp(type.dataTypeString, "uint"))
{
- ((void (*)(void *, int))(void *)prop.Set)(dest, ((int(*)())(void *)prop.Get)(src));
+ ((void (*)(void *, int))(void *)prop.Set)(dest, ((int(*)(void *))(void *)prop.Get)(src));
}
else if(type.typeSize == sizeof(short int)) // || !strcmp(type.dataTypeString, "short") || !strcmp(type.dataTypeString, "unsigned short") || !strcmp(type.dataTypeString, "uint16") || !strcmp(type.dataTypeString, "int16"))
{
- ((void (*)(void *, short))(void *)prop.Set)(dest, ((short(*)())(void *)prop.Get)(src));
+ ((void (*)(void *, short))(void *)prop.Set)(dest, ((short(*)(void *))(void *)prop.Get)(src));
}
else if(type.typeSize == sizeof(byte))// || !strcmp(type.dataTypeString, "char") || !strcmp(type.dataTypeString, "unsigned char") || !strcmp(type.dataTypeString, "byte"))
{
- ((void (*)(void *, byte))(void *)prop.Set)(dest, ((byte(*)())(void *)prop.Get)(src));
+ ((void (*)(void *, byte))(void *)prop.Set)(dest, ((byte(*)(void *))(void *)prop.Get)(src));
}
else
{
- prop.Set(dest, prop.Get(src));
+ ((void (*)(void *, int))(void *)prop.Set)(dest, ((int (*)(void *))(void *)prop.Get)(src));
}
}
if(type.type == normalClass || type.type == noHeadClass || type.type == structClass)
{
- value.p = ((void*(*)())(void *)prop.Get)(object);
+ value.p = ((void*(*)(void *))(void *)prop.Get)(object);
}
// TOFIX: How to swiftly handle classes with base data type?
else if(type == class(double) || !strcmp(type.dataTypeString, "double"))
{
- value.d = ((double(*)())(void *)prop.Get)(object);
+ value.d = ((double(*)(void *))(void *)prop.Get)(object);
}
else if(type == class(float) || !strcmp(type.dataTypeString, "float"))
{
- value.f = ((float(*)())(void *)prop.Get)(object);
+ value.f = ((float(*)(void *))(void *)prop.Get)(object);
}
else if(type.typeSize == sizeof(int64))// || !strcmp(type.dataTypeString, "int64") || !strcmp(type.dataTypeString, "unsigned int64") || !strcmp(type.dataTypeString, "uint64"))
{
- value.i64 = ((int64(*)())(void *)prop.Get)(object);
+ value.i64 = ((int64(*)(void *))(void *)prop.Get)(object);
}
else if(type.typeSize == sizeof(int))// || !strcmp(type.dataTypeString, "int") || !strcmp(type.dataTypeString, "unsigned int") || !strcmp(type.dataTypeString, "uint"))
{
- value.i = ((int(*)())(void *)prop.Get)(object);
+ value.i = ((int(*)(void *))(void *)prop.Get)(object);
}
else if(type.typeSize == sizeof(short int)) // || !strcmp(type.dataTypeString, "short") || !strcmp(type.dataTypeString, "unsigned short") || !strcmp(type.dataTypeString, "uint16") || !strcmp(type.dataTypeString, "int16"))
{
- value.s = ((short(*)())(void *)prop.Get)(object);
+ value.s = ((short(*)(void *))(void *)prop.Get)(object);
}
else if(type.typeSize == sizeof(byte))// || !strcmp(type.dataTypeString, "char") || !strcmp(type.dataTypeString, "unsigned char") || !strcmp(type.dataTypeString, "byte"))
{
- value.uc = ((byte(*)())(void *)prop.Get)(object);
+ value.uc = ((byte(*)(void *))(void *)prop.Get)(object);
}
else
{
- value.i = prop.Get(object);
+ value.i = ((int (*)(void *))(void *)prop.Get)(object);
}
}
else
if(type.type == normalClass || type.type == noHeadClass || type.type == structClass)
{
- prop.Set(object, value);
+ ((void (*)(void *, void *))(void *)prop.Set)(object, value);
}
// TOFIX: How to swiftly handle classes with base data type?
else if(type == class(double) || !strcmp(type.dataTypeString, "double"))
}
}
+static define sheetSelectionColor = Color { 170, 220, 255 };
+static define sheetSelectionText = black;
+
class Sheet : Window
{
text = $"Sheet";
//tabCycle = true;
size.w = 300;
anchor = { left = 0, top = 0, bottom = 0 };
- background = activeBorder;
+ background = formColor;
Sheet()
{
bool NotifySelect(DropBox control, DataRow row, Modifiers keyFlags)
{
ObjectInfo selected = (ObjectInfo)(row ? row.tag : null);
- ToolBox toolBox = ((IDE)parent).toolBox;
+ ToolBox toolBox = ((IDEWorkSpace)parent).toolBox;
if(codeEditor && selected)
codeEditor.SelectObject(selected);
bool NotifyClicked(Button button, int x, int y, Modifiers mods)
{
text = $"Properties";
- button.font = { "Tahoma", 8.25f, bold = true };
+ button.font = { $"Tahoma", 8.25f, bold = true };
methBtn.font = null;
methods.visible = false;
properties.Activate();
- // ((IDE)master).SheetSelected(Properties);
+ // ((IDEWorkSpace)master).SheetSelected(Properties);
return true;
}
};
bool NotifyClicked(Button button, int x, int y, Modifiers mods)
{
text = $"Methods";
- button.font = { "Tahoma", 8.25f, bold = true };
+ button.font = { $"Tahoma", 8.25f, bold = true };
propBtn.font = null;
properties.visible = false;
categorized.disabled = true;
methods.Activate();
-
- // ((IDE)master).SheetSelected(Methods);
+
+ // ((IDEWorkSpace)master).SheetSelected(Methods);
return true;
}
};
hasVertScroll = true, alwaysEdit = true, collapseControl = true, resizable = true;
background = viewsBackground;
foreground = viewsText;
+ selectionText = sheetSelectionText;
+ selectionColor = sheetSelectionColor;
bool NotifySelect(ListBox control, DataRow row, Modifiers keyFlags)
{
{
CodeObject object = control.GetData(methodName);
if(object)
- codeEditor.AddMethod(object.method);
+ codeEditor.AddMethod(object.method);
return false;
}
for(compatible = object.compatible.first; compatible; compatible = compatible.next)
{
ClassFunction function = compatible.data;
- MenuItem { attachMenu, function.declarator.symbol.string, id = (int)function, NotifySelect = AttachMethodSelected };
+ MenuItem { attachMenu, function.declarator.symbol.string, id = (int64)function, NotifySelect = AttachMethodSelected };
}
}
}
ClassFunction function = compatible.data;
if(function != object.function)
{
- MenuItem { attachMenu, function.declarator.symbol.string, id = (int)function, NotifySelect = ReattachMethodSelected };
+ MenuItem { attachMenu, function.declarator.symbol.string, id = (int64)function, NotifySelect = ReattachMethodSelected };
}
}
}
DataField methodName { dataType = class(CodeObject) };
#ifdef SHOW_METHODS
- methBtn.font = { "Tahoma", 8.25, bold = true };
+ methBtn.font = { $"Tahoma", 8.25, bold = true };
methBtn.checked = true;
properties.visible = false;
text = $"Methods";
#else
- propBtn.font = { "Tahoma", 8.25f, bold = true };
+ propBtn.font = { $"Tahoma", 8.25f, bold = true };
propBtn.checked = true;
methods.visible = false;
text = $"Properties";
this, bevelOver = true, checked = true, inactive = true, position = { 0, 25 }, size = { 24, 24 };
bitmap = { "<:ecere>elements/orderCategorized.png" };
// isRadio = true;
-
+
bool NotifyClicked(Button button, int x, int y, Modifiers mods)
{
if(!categorized.checked)
dropBox.Clear();
dropField.userData = codeEditor;
methodName.userData = codeEditor;
-
+
if(codeEditor)
codeEditor.EnumerateObjects(this);
}
else if(key == escape)
{
Window activeClient = ide.activeClient;
- if(activeClient)
+ if(activeClient)
activeClient.Activate();
- else
+ else
ide.RepositionWindows(true);
}
return true;
{
DataRow row = dropBox.currentRow;
ObjectInfo selected = row ? (ObjectInfo)row.tag : null;
-
+
//int scroll = 0;
bool categorized = this.categorized.checked;
bool currentRow = false;
char * propName;
while(propRow && propRow.parent && !propRow.parent.isHeader)
propRow = row.parent;
-
+
propName = propRow.GetData(propertyName);
strcpy(this.selectedProp, propName);
selectedScroll = properties.scroll.y;
if(propIt.isProperty)
{
Property prop = eClass_FindProperty(selected.instance._class, propIt.name, GetPrivateModule());
-
- if(prop && prop.Set && prop.Get && prop.compiled)
+
+ if(prop && prop.Set && prop.Get && prop.compiled && (!prop.category || strcmpi(prop.category, $"Deprecated")))
{
bool disabled = Code_IsPropertyDisabled(selected, prop.name);
bool bold;
if(!strcmp(_class.name, "DesignerBase"))
disabled = true;
- bold = !disabled && Code_IsPropertyModified(test, selected, prop);
+ bold = !disabled && Code_IsPropertyModified(test, selected, prop);
if(dataType)
{
DataRow row;
PropertyInfo info { prop, disabled, bold ? codeEditor.boldFont : codeEditor.normalFont };
- char * name = prop.category ? prop.category : $"Misc";
+ const char * name = prop.category ? prop.category : $"Misc";
Category category = categories.FindName(name, false);
// Hide properties like this for now..
- if(name && !strcmp(name, "Private"))
+ if(name && !strcmp(name, "Private"))
{
delete info;
continue;
if(clear)
{
- row = categorized ? category.row.FindRow((int)prop) : properties.FindRow((int)prop);
+ row = categorized ? category.row.FindRow((int64)prop) : properties.FindRow((int64)prop);
if(!row)
row = categorized ? category.row.AddRow() : properties.AddRow();
- row.tag = (int)prop;
+ row.tag = (int64)prop;
}
else
- row = categorized ? category.row.FindRow((int)prop) : properties.FindRow((int)prop);
+ row = categorized ? category.row.FindRow((int64)prop) : properties.FindRow((int64)prop);
row.SetData(propertyName, prop.name);
row.SetData(propertyValue, info);
if(!dataType.noExpansion && (dataType.type == structClass || dataType.type == normalClass || dataType.type == noHeadClass || dataType.type == bitClass))
{
DataMember member;
-
+
if(clear)
row.collapsed = true;
if(clear)
{
subRow = row.AddRow();
- subRow.tag = (int)subProp;
+ subRow.tag = (int64)subProp;
}
else
- subRow = row.FindRow((int)subProp);
-
+ subRow = row.FindRow((int64)subProp);
+
subRow.SetData(propertyName, subProp.name);
subRow.SetData(propertyValue, info);
}
if(clear)
{
subRow = row.AddRow();
- subRow.tag = (int)member;
+ subRow.tag = (int64)member;
}
else
- subRow = row.FindRow((int)member);
+ subRow = row.FindRow((int64)member);
subRow.SetData(propertyName, member.name);
subRow.SetData(propertyValue, info);
if(clear)
{
subRow = row.AddRow();
- subRow.tag = (int)subMember;
+ subRow.tag = (int64)subMember;
}
else
- subRow = row.FindRow((int)subMember);
+ subRow = row.FindRow((int64)subMember);
subRow.SetData(propertyName, subMember.name);
subRow.SetData(propertyValue, info);
if(!properties.currentRow)
{
bool found = false;
-
+
for(_class = selected.instance._class; _class; _class = _class.base)
{
Property prop;
if(_class.defaultProperty && !strcmp(prop.name, _class.defaultProperty))
{
DataRow row;
- char * name = prop.category ? prop.category : $"Misc";
+ const char * name = prop.category ? prop.category : $"Misc";
Category category = categories.FindName(name, false);
- row = category ? (categorized ? category.row.FindRow((int)prop) : properties.FindRow((int)prop)) : null;
+ row = category ? (categorized ? category.row.FindRow((int64)prop) : properties.FindRow((int64)prop)) : null;
properties.currentRow = row;
found = true;
- break;
+ break;
}
}
}
}
}
- void AddObject(ObjectInfo object, char * name, CodeObjectType type, bool select)
+ void AddObject(ObjectInfo object, const char * name, CodeObjectType type, bool select)
{
DataRow after = null;
DataRow row;
}
row = (DataRow)dropBox.AddRowAfter(after);
-
- row.tag = (int)object;
- codeObject =
+ row.tag = (int64)object;
+
+ codeObject =
{
object = object;
name = name;
codeObject.bitmap = { bitmap };
AddResource(codeObject.bitmap);
}
-
+
row.SetData(null, codeObject);
if(select)
void DeleteObject(ObjectInfo object)
{
- DataRow row = dropBox.FindRow((int)object);
+ DataRow row = dropBox.FindRow((int64)object);
if(row)
{
CodeObject codeObject = row.GetData(null);
-
+
if(codeObject.bitmap)
RemoveResource(codeObject.bitmap);
dropBox.DeleteRow(row);
{
if(this)
{
- DataRow row = dropBox.FindRow((int)object);
+ DataRow row = dropBox.FindRow((int64)object);
this.object = object ? object.instance : null;
propertyValue.userData = object ? (void *)object.instance : null;
dropBox.SelectRow(row);
}
}
- void RenameObject(ObjectInfo object, char * name)
+ void RenameObject(ObjectInfo object, const char * name)
{
- DataRow row = dropBox.FindRow((int)object);
+ DataRow row = dropBox.FindRow((int64)object);
CodeObject codeObject = row.GetData(null);
// Isn't this useless? Shouldn't it be after?
codeObject.name = name;
Property prop = propertyPtr ? propertyPtr.prop : null;
Instance object = this.object;
if(prop)
- {
+ {
Class dataType = prop.dataTypeClass;
if(!dataType)
dataType = prop.dataTypeClass = eSystem_FindClass(codeEditor.privateModule, prop.dataTypeString);
if(dataType.type == structClass)
{
data = new0 byte[dataType.structSize];
- prop.Get(object, data);
+ ((void (*)(void *, void *))(void *)prop.Get)(object, data);
// CopyBytes((byte *)data + member.offset + propertyPtr.extraOffset, &setValue, subDataType.size);
CopyBytes((byte *)data + member.offset + propertyPtr.extraOffset, (void *)setValue, subDataType.dataType.size);
- prop.Set(object, data);
+ ((void (*)(void *, void *))(void *)prop.Set)(object, data);
}
else if(dataType.type == normalClass || dataType.type == noHeadClass)
{
if(subDataType)
{
DataValue value = { 0 };
- value.ui = prop.Get(object);
+ value.ui = ((uint (*)(void *))(void *)prop.Get)(object);
value.ui &= ~ (uint)bitMember.mask;
value.ui |= *(uint32 *)setValue << bitMember.pos;
- prop.Set(object, value.ui);
+ ((void (*)(void *, uint))(void *)prop.Set)(object, value.ui);
}
}
else
{
+ // TODO: What does this handle?
data = dataType.typeSize ? new0 byte[dataType.typeSize] : null;
- prop.Get(object, data);
+ ((void (*)(void *, void *))(void *)prop.Get)(object, data);
// CopyBytes((byte *)data + member.offset + propertyPtr.extraOffset, &setValue, subDataType.typeSize);
CopyBytes((byte *)data + member.offset + propertyPtr.extraOffset, (void *)setValue, subDataType.dataType.size);
// TODO: Support non 32 bit datatypes here
- prop.Set(object, data);
+ ((void (*)(void *, void *))(void *)prop.Set)(object, data);
}
}
- if(data) dataType._vTbl[__ecereVMethodID_class_OnFree](dataType,&data);
+ if(data) ((void (*)(void *, void *))(void *)dataType._vTbl[__ecereVMethodID_class_OnFree])(dataType,&data);
delete data;
}
}
if(dataType.type == structClass)
{
data = new0 byte[dataType.structSize];
- prop.Get(object, data);
- subProperty.Set(data, *(uint32 *)setValue);
- prop.Set(object, data);
+ ((void (*)(void *, void *))(void *)prop.Get)(object, data);
+ ((void (*)(void *, uint))(void *)subProperty.Set)(data, *(uint32 *)setValue);
+ ((void (*)(void *, void *))(void *)prop.Set)(object, data);
}
else if(dataType.type == normalClass || dataType.type == noHeadClass)
{
- Instance current = (Instance)prop.Get(object);
+ Instance current = (Instance)((void *(*)(void *))(void *)prop.Get)(object);
Instance propObject = eInstance_New(dataType);
CopyInstanceData(dataType, propObject, current);
- subProperty.Set(propObject, (uint32)setValue);
- prop.Set(object, propObject);
+ ((void (*)(void *, uint))(void *)subProperty.Set)(propObject, (uint32)setValue);
+ ((void (*)(void *, void *))(void *)prop.Set)(object, propObject);
}
else
{
data = dataType.typeSize ? new0 byte[dataType.typeSize] : null;
- prop.Get(object, data);
- subProperty.Set(data, (uint32)setValue);
+ ((void (*)(void *, void *))(void *)prop.Get)(object, data);
+ ((void (*)(void *, uint))(void *)subProperty.Set)(data, (uint32)setValue);
// TODO: Support not 32 bit data types here
- prop.Set(object, data);
+ ((void (*)(void *, void *))(void *)prop.Set)(object, data);
}
- if(data) dataType._vTbl[__ecereVMethodID_class_OnFree](dataType,&data);
+ if(data) ((void (*)(void *, void *))(void *)dataType._vTbl[__ecereVMethodID_class_OnFree])(dataType,&data);
delete data;
}
}
else
{
SetPropValue(prop, object, (uint32)setValue);
- }
+ }
Code_FixProperty(propertyPtr.prop, object);
properties.Update(null);
codeEditor.Update(null); // patch for redraw bug if on top
ListProperties(false);
+ // DataRow values were changed by ListProperties, need to re-query
+ propertyPtr = properties.GetData(null);
+ if(propertyPtr)
+ dataBox.editor.font = { propertyPtr.font.faceName, propertyPtr.font.size, propertyPtr.font.bold };
- dataBox.editor.font = { propertyPtr.font.faceName, propertyPtr.font.size, propertyPtr.font.bold };
codeEditor.ModifyCode();
}
}
ClassFunction function = (ClassFunction)selection.id;
CodeObject object = methods.GetData(methodName);
if(object)
- codeEditor.AddMethod(object.method);
+ codeEditor.AddMethod(object.method);
return true;
}
{
DataRow row = (DataRow)button.id;
CodeObject object = row.GetData(methodName);
- codeEditor.AddMethod(object.method);
+ codeEditor.AddMethod(object.method);
return true;
}
void CreateButtons(CodeObject codeObject, int y, int h, DataRow row)
{
BitmapResource bitmap;
-
+
if(codeObject.overriden)
{
if(codeObject.overriden == 1)
bitmap = { ":actions/delete.png", alphaBlend = true },
anchor = { right = 16, top = y },
size = { 16, h },
- id = (int)row;
+ id = (int64)row;
bool NotifyClicked(Button button, int x, int y, Modifiers mods)
{
sprintf(title, $"Delete %s", codeObject.name);
if(MessageBox
{
- master = parent, type = okCancel, text = title,
+ master = parent, type = okCancel, text = title,
contents = $"Method still contains code. Are you sure you want to delete it?"
}.Modal() == ok)
confirmation = false;
if(codeObject.overriden == 2 || !codeObject.function.attached.count)
{
- codeObject.detachBtn = Button
+ codeObject.detachBtn = Button
{
methods,
master = methods.master,
bitmap = { ":actions/detach.png" },
anchor = { right = 0, top = y },
size = { 16, h },
- id = (int)row;
+ id = (int64)row;
bool NotifyClicked(Button button, int x, int y, Modifiers mods)
{
bitmap = { ":actions/attach.png" },
anchor = { right = 0, top = y },
size = { 16, h },
- id = (int)row;
+ id = (int64)row;
bool NotifyPushed(Button button, int x, int y, Modifiers mods)
{
PopupMenu popupMenu;
Menu menu { };
-
+
for(compatible = object.compatible.first; compatible; compatible = compatible.next)
{
ClassFunction function = compatible.data;
- MenuItem { menu, function.declarator.symbol.string, id = (int)function, NotifySelect = AttachMethodSelected };
+ MenuItem { menu, function.declarator.symbol.string, id = (int64)function, NotifySelect = AttachMethodSelected };
}
attachMethod = object.method;
popupMenu = PopupMenu
- {
- master = this, menu = menu,
+ {
+ master = this, menu = menu,
position =
{
button.absPosition.x - app.desktop.position.x,
int selectedScroll;
}
-static int String_OnCompare(char ** string1, char ** string2)
+static int String_OnCompare(const char ** string1, const char ** string2)
{
int result = 0;
if(*string1 && *string2)
{
DataMember member;
for(member = _class.membersAndProperties.first; member; member = member.next)
- {
+ {
Class memberType = member.dataTypeClass;
if(!memberType)
memberType = member.dataTypeClass = eSystem_FindClass(((Designer)GetActiveDesigner()).codeEditor.privateModule, member.dataTypeString);
if(subProp.Get && subProp.Set)
CopyProperty(subProp, propObject, current);
}
- else
+ else if(member.id > -1)
{
if(memberType)
// TOCHECK: I have serious doubts this works in many cases.
- memberType._vTbl[__ecereVMethodID_class_OnCopy](memberType, (byte *)propObject + member.offset, (byte *)current + member.offset);
- else if(member.memberOffset)
+ ((void (*)(void *, void *, void *))(void *)memberType._vTbl[__ecereVMethodID_class_OnCopy])(memberType, (byte *)propObject + member.offset, (byte *)current + member.offset);
+ else
memcpy((byte *)propObject + member.offset, (byte *)current + member.offset, member.memberOffset);
}
}
Property prop;
bool disabled;
FontResource font;
- char * categoryName;
+ const char * categoryName;
DataMember subMember;
Property subProperty;
uint extraOffset;
surface.TextFont(font.font);
if(disabled)
- {
+ {
surface.SetBackground(Color { 170, 170, 170 });
surface.Area(0,0, x+width-1, y+100);
}
Module module = ((Designer)GetActiveDesigner()).codeEditor.privateModule;
if(!dataType)
dataType = prop.dataTypeClass = eSystem_FindClass(module, prop.dataTypeString);
-
+
if(dataType && prop.Get)
{
void * dataPtr, * data = null, * subData = null;
DataValue valueData, valueSubData;
uint64 bitValue;
-
+
// Get main prop
if(dataType.type == structClass)
{
data = new0 byte[dataType.structSize];
- prop.Get(object, data);
+ ((void (*)(void *, void *))(void *)prop.Get)(object, data);
dataPtr = data;
}
else
else
dataPtr = &valueData;
}
-
+
// Get sub prop
if(this.subMember)
{
if(subDataType.type == structClass)
{
subData = new0 byte[subDataType.structSize];
- subProperty.Get(dataPtr, subData);
+ ((void (*)(void *, void *))(void *)subProperty.Get)(dataPtr, subData);
dataPtr = subData;
}
else
}
if(dataType)
- dataType._vTbl[__ecereVMethodID_class_OnDisplay](dataType, dataPtr, surface, x, y, width, null, alignment, displayFlags);
+ ((void (*)(void *, void *, void *, int, int, int, void *, uint, uint))(void *)dataType._vTbl[__ecereVMethodID_class_OnDisplay])(dataType, dataPtr, surface, x, y, width, null, alignment, displayFlags);
delete data;
delete subData;
Window OnEdit(DataBox dataBox, Window obsolete, int x, int y, int w, int h, void * unused)
{
- EditBox editData = null;
+ Window editData = null;
Property prop = this.prop;
-
+
dataBox.SetData = Sheet::EditSetData;
if(prop && prop.dataTypeString && !this.disabled)
{
void * dataPtr, * data = null, * subData = null;
DataValue valueData, valueSubData;
uint64 bitValue;
-
+ bool isEditBoxMultiLineContents = false;
+
// Get main prop
if(dataType.type == structClass)
{
data = new0 byte[dataType.structSize];
- prop.Get(object, data);
+ ((void (*)(void *, void *))(void *)prop.Get)(object, data);
dataPtr = data;
}
else
{
- GetProperty(prop, object, &valueData);
+ bool freeDataForm = false, freeDataTest = false;
+ // Because contents property is broken for mutiline EditBox at the moment
+ if(!strcmp(prop.name, "contents") && !strcmp(prop._class.name, "EditBox") && ((EditBox)object).multiLine)
+ {
+ isEditBoxMultiLineContents = true;
+ dataType = eSystem_FindClass(((Designer)GetActiveDesigner()).codeEditor.privateModule, "MultiLineString");
+ valueData.p = ((EditBox)object).multiLineContents;
+ dataBox.size.h = 3*(h-2);
+ h = dataBox.clientSize.h;
+ }
+ else
+ GetProperty(prop, object, &valueData);
+
if(dataType.type == normalClass)
dataPtr = valueData.p;
else
dataPtr = &valueData;
}
-
+
// Get sub prop
if(this.subMember)
{
if(subDataType.type == structClass)
{
subData = new0 byte[subDataType.structSize];
- subProperty.Get(dataPtr, subData);
+ ((void (*)(void *, void *))(void *)subProperty.Get)(dataPtr, subData);
dataPtr = subData;
}
else
}
if(dataType)
- editData = (void *)dataType._vTbl[__ecereVMethodID_class_OnEdit](dataType, dataPtr, dataBox, obsolete, x, y, w, h, object /*unused*/);
+ editData = ((Window (*)(void *, void *, DataBox, void *, int, int, int, int, void*))(void *)dataType._vTbl[__ecereVMethodID_class_OnEdit])(dataType, dataPtr, dataBox, obsolete, x, y, w, h, object /*unused*/);
delete data;
delete subData;
+ if(isEditBoxMultiLineContents)
+ delete valueData.p;
+
editData.font = { font.faceName, font.size, font.bold };
+ if(eClass_IsDerived(editData._class, class(DropBox)))
+ {
+ DropBox db = (DropBox)editData;
+ db.selectionColor = sheetSelectionColor;
+ db.selectionText = sheetSelectionText;
+ }
+ else if(eClass_IsDerived(editData._class, class(EditBox)))
+ {
+ EditBox eb = (EditBox)editData;
+ eb.selectionColor = sheetSelectionColor;
+ eb.selectionText = sheetSelectionText;
+ }
}
}
return editData;
int OnCompare(PropertyInfo data2)
{
- char * category1 = prop ? prop.category : categoryName;
- char * category2 = data2.prop ? data2.prop.category : data2.categoryName;
+ const char * category1 = prop ? prop.category : categoryName;
+ const char * category2 = data2.prop ? data2.prop.category : data2.categoryName;
int result;
if(!category1) category1 = $"Misc";
if(!category2) category2 = $"Misc";
-
+
if(!prop)
{
- // result = String::OnCompare((String)category1, (String)category2);
result = String_OnCompare(&category1, &category2);
}
else
else
// result = ((String)prop.name).OnCompare(data2.prop.name);
// result = String::OnCompare((String)prop.name, (String)data2.prop.name);
- result = String_OnCompare(&prop.name, &data2.prop.name);
+ result = String_OnCompare((const char **)&prop.name, (const char **)&data2.prop.name);
}
return result;
}
if(!mainDataType)
mainDataType = prop.dataTypeClass = eSystem_FindClass(((Designer)GetActiveDesigner()).codeEditor.privateModule, prop.dataTypeString);
dataType = mainDataType;
-
+
+ // Because contents property is broken for mutiline EditBox at the moment
+ if(!strcmp(prop.name, "contents") && !strcmp(prop._class.name, "EditBox") && ((EditBox)object).multiLine)
+ dataType = eSystem_FindClass(((Designer)GetActiveDesigner()).codeEditor.privateModule, "MultiLineString");
+
// Prepare main prop
if(dataType.type == structClass)
{
data = new0 byte[dataType.structSize];
if(this.subMember || this.subProperty)
- prop.Get(object, data);
+ ((void (*)(void *, void *))(void *)prop.Get)(object, data);
dataPtr = data;
propObject = data;
}
else if(dataType.type == normalClass || dataType.type == noHeadClass)
{
dataPtr = &valueData;
-
+
if(this.subMember || this.subProperty)
{
Class _class;
- Instance current = (Instance)prop.Get(object);
+ Instance current = (Instance)((void *(*)(void *))(void *)prop.Get)(object);
propObject = valueData.p = eInstance_New(dataType);
CopyInstanceData(dataType, propObject, current);
}
}
else
{
-
+
if(this.subMember || this.subProperty)
GetProperty(prop, object, &valueData);
-
+
dataPtr = &valueData;
propObject = &valueData;
}
-
+
// Prepare sub prop
if(this.subMember)
{
{
Property subProperty = this.subProperty;
Class subDataType = subProperty.dataTypeClass;
-
+
if(!subDataType)
- subDataType = subProperty.dataTypeClass =
+ subDataType = subProperty.dataTypeClass =
eSystem_FindClass(((Designer)GetActiveDesigner()).codeEditor.privateModule, subProperty.dataTypeString);
if(!subProperty.Get) subDataType = null;
if(subDataType)
if(dataType)
{
- if(dataType._vTbl[__ecereVMethodID_class_OnSaveEdit](dataType, dataPtr, editControl, null))
+ if(((bool (*)(void *, void *, Window, void *))(void *)dataType._vTbl[__ecereVMethodID_class_OnSaveEdit])(dataType, dataPtr, editControl, null))
{
if(mainDataType.type == bitClass && this.subMember)
{
if(this.subProperty)
{
if(dataType.type == structClass)
- this.subProperty.Set(propObject, subData);
- else if(dataType.type == unitClass || dataType.type == enumClass || dataType.type == bitClass)
+ ((void (*)(void *, void *))(void *)this.subProperty.Set)(propObject, subData);
+ else if(dataType.type == unitClass || dataType.type == enumClass || dataType.type == bitClass || dataType.type == systemClass)
{
if(!strcmp(dataType.dataTypeString, "float"))
((void(*)(void *,float))(void *)this.subProperty.Set)(propObject, valueSubData.f);
((void(*)(void *,byte))(void *)this.subProperty.Set)(propObject, valueSubData.uc);
else if(!strcmp(dataType.dataTypeString, "uint16"))
((void(*)(void *,uint16))(void *)this.subProperty.Set)(propObject, valueSubData.us);
- else
- this.subProperty.Set(propObject, valueSubData.ui);
+ else
+ ((void (*)(void *, uint))(void *)this.subProperty.Set)(propObject, valueSubData.ui);
}
else
- this.subProperty.Set(propObject, valueSubData.ui);
+ ((void (*)(void *, void *))(void *)this.subProperty.Set)(propObject, valueSubData.p);
}
if(mainDataType.type == structClass)
- prop.Set(object, data);
- else if(mainDataType.type == unitClass || mainDataType.type == enumClass || mainDataType.type == bitClass)
+ ((void (*)(void *, void *))(void *)prop.Set)(object, data);
+ else if(mainDataType.type == unitClass || mainDataType.type == enumClass || mainDataType.type == bitClass || mainDataType.type == systemClass)
{
if(!strcmp(mainDataType.dataTypeString, "float"))
((void(*)(void *,float))(void *)prop.Set)(object, valueData.f);
else if(!strcmp(mainDataType.dataTypeString, "uint16"))
((void(*)(void *,uint16))(void *)prop.Set)(object, valueData.us);
else
- prop.Set(object, valueData.ui);
+ ((void (*)(void *, uint))(void *)prop.Set)(object, valueData.ui);
}
else
- prop.Set(object, valueData.ui);
+ ((void (*)(void *, void *))(void *)prop.Set)(object, valueData.p);
result = true;
}
- if(data == dataPtr) dataType._vTbl[__ecereVMethodID_class_OnFree](dataType, &data);
- if(subData == dataPtr) dataType._vTbl[__ecereVMethodID_class_OnFree](dataType, &subData);
+ if(data == dataPtr) ((void (*)(void *, void *))(void *)dataType._vTbl[__ecereVMethodID_class_OnFree])(dataType, &data);
+ if(subData == dataPtr) ((void (*)(void *, void *))(void *)dataType._vTbl[__ecereVMethodID_class_OnFree])(dataType, &subData);
}
delete data;
delete subData;
class Category : struct
{
Category prev, next;
- char * name;
+ const char * name;
DataRow row;
bool collapsed;
};