public class Window
{
private:
- class_data char * icon;
+ class_data const char * icon;
class_no_expansion
class_default_property caption;
// class_initialize GuiApplication::Initialize;
class_designer FormDesigner;
- class_property char * icon
+ class_property const char * icon
{
set { class_data(icon) = value; }
get { return class_data(icon); }
delete order;
/////////////////////////////////
- while(ptr = resources.first)
+ while((ptr = resources.first))
{
delete ptr.resource;
resources.Delete(ptr);
*&child.parent = null;
}
- while(slave = slaves.first)
+ while((slave = slaves.first))
{
// Don't want property here
*&((Window)slave.data).master = null;
}
//#if !defined(ECERE_VANILLA)
- char * OnGetString(char * stringOutput, void * fieldData, bool * needClass)
+ const char * OnGetString(char * stringOutput, void * fieldData, bool * needClass)
{
if(this == activeDesigner)
return "(Desktop)";
else
{
- char * name = property::name;
+ const char * name = property::name;
return name ? name : "";
}
}
//#endif
#if !defined(ECERE_VANILLA) && !defined(ECERE_NOTRUETYPE)
- bool OnGetDataFromString(char * string)
+ bool OnGetDataFromString(const char * string)
{
FormDesigner designer = (FormDesigner)activeDesigner.classDesigner;
if(string[0])
int ph = parent ? parent.clientSize.h : 0;
int w = sizeAnchor.size.w, h = sizeAnchor.size.h;
int x = anchor.left.distance, y = anchor.top.distance;
- float ex, ey;
+ float ex = 0, ey = 0;
MinMaxValue ew = 0, eh = 0;
int numCascade;
float cascadeW, cascadeH;
int numTiling;
- int tilingW, tilingH, tilingSplit, tilingLastH;
+ int tilingW, tilingH, tilingSplit, tilingLastH = 0;
int addX = 0, addY = 0;
if(parent && rootWindow == this && guiApp && guiApp.interfaceDriver)
{
if(!parent.noAutoScrollArea)
{
+ // TODO: Review the logic of all this? Each child is going to reposition the parent?
+ /*
Window child;
bool found = false;
for(child = children.first; child; child = child.next)
}
}
}
- //if(!found)
+ if(!found)
+ */
{
Window parent = this.parent;
parent.Position(
int oldCW = clientSize.w, oldCH = clientSize.h;
bool clientResized, windowResized, windowMoved;
Window child;
- bool realResized = size.w != w || size.h != h;
+ //bool realResized = size.w != w || size.h != h;
// TOCHECK: This wasn't in ecere.dll
//if(!parent) return true;
{
MinMaxValue cw = 0, ch = 0;
bool sbvVisible, sbhVisible;
- int rangeH, rangeV;
- int positionH, positionV;
+ int rangeH = 0, rangeV = 0;
+ int positionH = 0, positionV;
// First get client area with no respect to scroll bars
if(hasMaxMin && parent)
{
- SkinBitmap skin;
+ //SkinBitmap skin;
unichar symbol;
bool (* method)(Window window, Button button, int x, int y, Modifiers mods);
if(state == maximized)
{
- skin = restore;
+ //skin = restore;
method = RestoreButtonClicked;
symbol = '\x12';
}
else
{
- skin = maximize;
+ //skin = maximize;
method = MaximizeButtonClicked;
symbol = '\x18';
}
if(hasMaxMin && parent)
{
- SkinBitmap skin;
+ //SkinBitmap skin;
unichar symbol;
bool (* method)(Window window, Button button, int x, int y, Modifiers mods);
if (state == minimized)
{
- skin = restore;
+ //skin = restore;
method = RestoreButtonClicked;
symbol = '\x12';
}
else
{
- skin = minimize;
+ //skin = minimize;
method = MinimizeButtonClicked;
symbol = '\x19';
}
if(menu)
{
MenuItem item;
- bool disabled;
+ //bool disabled;
if(menu)
menu.Clean(this);
int id;
for(id = 0, cycle = activeClient.cycle; cycle && id<10;)
{
- MenuItem item;
Window document = cycle.data;
if(!document.style.nonClient && document.style.isActiveClient && document.visible)
{
if((!previous && activeClient) || !activeClient)
{
- if(!activeClient)
+ /*if(!activeClient)
disabled = true;
else
- disabled = false;
+ disabled = false;*/
item = menu.FindItem(MenuWindowCloseAll, 0);
if(item) item.disabled = false;
item = menu.FindItem(MenuWindowNext, 0);
void ComputeRenderAreaNonOpaque(Extent dirtyExtent, Extent overDirtyExtent, Extent backBufferUpdate)
{
- bool opaque = IsOpaque();
Window child;
int offsetX = absPosition.x - rootWindow.absPosition.x, offsetY = absPosition.y - rootWindow.absPosition.y;
if(rootWindow.nativeDecorations && rootWindow.windowHandle)
for(child = children.last; child; child = child.prev)
{
- ColorAlpha background = *(ColorAlpha *)&child.background;
bool opaque = child.IsOpaque();
if(!child.style.hidden && child.created && !child.is3D && child.rootWindow)
{
// TESTING THIS HERE
UpdateDecorations();
- if(result = OnActivate(active, previous, goOnWithActivation, direct) && *goOnWithActivation && master)
+ if((result = OnActivate(active, previous, goOnWithActivation, direct) && *goOnWithActivation && master))
result = NotifyActivate(master, this, active, previous);
else
{
if(real)
{
- bool acquireInput = false;
+ //bool acquireInput = false;
bool maximize =
parent.activeChild &&
parent.activeChild.state == maximized &&
delete this;
return false;
}
- acquireInput = true;
+ //acquireInput = true;
}
}
if(guiApp.windowCaptured || trueWindow)
{
Window prevWindow = guiApp.prevWindow;
- if(guiApp.prevWindow && trueWindow != guiApp.prevWindow)
+ List<Window> overWindows = guiApp.overWindows;
+ Iterator<Window> it { overWindows };
+
+ while(it.Next())
+ {
+ Window w = it.data;
+ if(trueWindow != w && !trueWindow.IsDescendantOf(w))
+ {
+ it.pointer = null;
+ result = w.OnMouseLeave(*mods);
+ if(!result) break;
+ overWindows.TakeOut(w);
+ }
+ }
+
+ if(result && guiApp.prevWindow && trueWindow != guiApp.prevWindow)
{
guiApp.prevWindow.mouseInside = false;
guiApp.prevWindow = null;
- // Eventually fix this not to include captured?
- if(!trueWindow.IsDescendantOf(prevWindow) && !prevWindow.OnMouseLeave(*mods))
- result = false;
+ if(result)
+ {
+ if(trueWindow.IsDescendantOf(prevWindow))
+ {
+ if(!overWindows.Find(prevWindow))
+ overWindows.Add(prevWindow);
+ }
+ // Eventually fix this not to include captured?
+ else if(!prevWindow.OnMouseLeave(*mods))
+ result = false;
+ }
}
if(result && trueWindow && !trueWindow.destroyed/* && trueWindow == window*/)
{
}
}
if(trueWindow && trueWindow._refCount > 1 && !trueWindow.destroyed)
+ {
+ for(w : guiApp.overWindows; w == trueWindow)
+ {
+ OnMouseLeave(0);
+ guiApp.overWindows.TakeOut(w);
+ break;
+ }
guiApp.prevWindow = trueWindow;
+ }
else
guiApp.prevWindow = null;
}
{
if(cycleParent.CycleChildren(!key.shift, false, false, true))
{
+ /*
Window child = cycleParent.activeChild;
// Scroll the window to include the active control
- /*
if(cycleParent.sbh && !child.style.dontScrollHorz)
{
if(child.scrolledPos.x < 0)
if(activeChild)
guiApp.interfaceDriver.ActivateRootWindow(activeChild);
}
- /*
- TODO:
if(!success)
- //guiApp.LogErrorCode(IERR_GRAPHICS_LOADING_FAILED, caption);
- guiApp.LogErrorCode(IERR_GRAPHICS_LOADING_FAILED, class.name);
- */
+ LogErrorCode(graphicsLoadingFailed, _class.name);
// Do this here to avoid problems on Windows
- if(stateBackup == maximized)
+ if(rootWindow == this && parent && stateBackup == maximized)
property::state = maximized;
return result;
}
guiApp.prevWindow = null;
OnMouseLeave(0);
}
+ else
+ {
+ for(w : guiApp.overWindows; w == this)
+ {
+ OnMouseLeave(0);
+ guiApp.overWindows.TakeOut(w);
+ break;
+ }
+ }
if(guiApp.caretOwner == this)
{
guiApp.interfaceDriver.SetCaret(0,0,0);
if(child.cycle && !child.style.nonClient && child.style.isActiveClient && child.visible)
{
DataRow row = listBox.AddRow();
- row.tag = (int64)child;
+ row.tag = (int64)(intptr)child;
child.FigureCaption(caption);
row.SetData(null, caption);
}
{
this, FileChange { modified = true };
- bool OnFileNotify(FileChange action, char * param)
+ bool OnFileNotify(FileChange action, const char * param)
{
incref this;
fileMonitor.StopMonitoring();
result = true;
else if(guiApp && guiApp.driver != null)
{
- void * systemParent = null;
OldLink slaveHolder;
Window last;
bool visible = !style.hidden;
/*if(rootWindow == this)
guiApp.interfaceDriver.ActivateRootWindow(this);
else*/
- if(creationActivation == activate)
+ if(creationActivation == activate && guiApp.desktop.active)
ActivateEx(true, false, true, true, null, null);
- else if(creationActivation == flash)
- Flash();
+ else if(creationActivation == activate || creationActivation == flash)
+ {
+ MakeActive();
+ if(this == rootWindow)
+ Flash();
+ }
}
if(!destroyed)
void SetScrollArea(int width, int height, bool snapToStep)
{
- bool resize = false;
if(snapToStep)
{
int stepX = sbStep.x, stepY = sbStep.y;
{
if(state == newState || OnStateChange(newState, mods))
{
- WindowState prevState = state;
+ //WindowState prevState = state;
StopMoving();
if(guiApp.desktop.active)
Activate();
else if(!active)
- Flash();
+ {
+ MakeActive();
+ if(this == rootWindow)
+ Flash();
+ }
}
void Deactivate(void)
}
}
- private void _SetCaption(char * format, va_list args)
+ private void _SetCaption(const char * format, va_list args)
{
if(this)
{
}
}
- /*deprecated*/ void SetText(char * format, ...)
+ /*deprecated*/ void SetText(const char * format, ...)
{
va_list args;
va_start(args, format);
va_end(args);
}
- void SetCaption(char * format, ...)
+ void SetCaption(const char * format, ...)
{
va_list args;
va_start(args, format);
fileDialog.master = master.parent ? master : this;
if(fileDialog.Modal() == ok)
{
- char * filePath = fileDialog.filePath;
+ const char * filePath = fileDialog.filePath;
saving = true;
if(OnSaveFile(filePath))
{
bool MenuWindowWindows(MenuItem selection, Modifiers mods)
{
WindowList dialog { master = this };
- Window document = (Window)dialog.Modal();
+ Window document = (Window)(intptr)dialog.Modal();
if(document)
{
if(activeChild.state == maximized)
virtual void OnHScroll(ScrollBarAction action, int position, Key key);
virtual void OnVScroll(ScrollBarAction action, int position, Key key);
virtual void OnDrawOverChildren(Surface surface);
- virtual bool OnFileModified(FileChange fileChange, char * param);
- virtual bool OnSaveFile(char * fileName);
+ virtual bool OnFileModified(FileChange fileChange, const char * param);
+ virtual bool OnSaveFile(const char * fileName);
// Virtual Methods -- Children management (To support Stacker, for lack of built-in auto-layout)
// Note: A 'client' would refer to isActiveClient, rather than
*cw = *w;
*ch = *h;
}
- virtual void ShowDecorations(Font captionFont, Surface surface, char * name, bool active, bool moving);
- virtual void PreShowDecorations(Font captionFont, Surface surface, char * name, bool active, bool moving);
+ virtual void ShowDecorations(Font captionFont, Surface surface, const char * name, bool active, bool moving);
+ virtual void PreShowDecorations(Font captionFont, Surface surface, const char * name, bool active, bool moving);
virtual bool IsMouseMoving(int x, int y, int w, int h)
{
return false;
// Notifications
virtual bool Window::NotifyActivate(Window window, bool active, Window previous);
virtual void Window::NotifyDestroyed(Window window, DialogResult result);
- virtual void Window::NotifySaved(Window window, char * filePath);
+ virtual void Window::NotifySaved(Window window, const char * filePath);
// Public Methods
get { return master ? master : parent; }
};
- property char * caption
+ property const char * caption
{
property_category $"Appearance"
watchable
{
if(value)
{
- Window sibling;
- /*for(sibling = parent.children.first; sibling; sibling = sibling.next)
+ /*Window sibling;
+ for(sibling = parent.children.first; sibling; sibling = sibling.next)
if(sibling != this && sibling.style.isDefault)
sibling.style.isDefault = false;*/
if(master.defaultControl)
property_category $"Layout"
isset
{
- Anchor thisAnchor = anchor;
- SizeAnchor thisSizeAnchor = sizeAnchor;
- bool leftRight = (anchor.left.type == none || anchor.left.type == middleRelative || anchor.right.type == none);
- bool topBottom = (anchor.top.type == none || anchor.top.type == middleRelative || anchor.bottom.type == none);
- bool isClient = !sizeAnchor.isClientW && !sizeAnchor.isClientH;
return ((anchor.left.type == none || anchor.left.type == middleRelative || anchor.right.type == none) ||
(anchor.top.type == none || anchor.top.type == middleRelative || anchor.bottom.type == none)) &&
!sizeAnchor.isClientW && !sizeAnchor.isClientH && sizeAnchor.size.w && sizeAnchor.size.h;
if(true || !parent.activeChild)
ActivateEx(true, false, true, true, null, null);
*/
- if(creationActivation == activate)
+ if(creationActivation == activate && guiApp.desktop.active)
ActivateEx(true, false, true, true, null, null);
- else if(creationActivation == flash && !object)
- Flash();
+ else if((creationActivation == activate || creationActivation == flash) && !object)
+ {
+ MakeActive();
+ if(this == rootWindow)
+ Flash();
+ }
//SetVisibility(!parent.style.hidden && (style.hidden ? false : true));
Update(null);
get { return (bool)noAutoScrollArea; }
};
- property char * fileName
+ property const char * fileName
{
property_category $"Document"
set
};
//#if !defined(ECERE_VANILLA)
- property char * name
+ property const char * name
{
property_category $"Design"
get
}
};
//#endif
- property char * displayDriver
+ property const char * displayDriver
{
property_category $"Behavior"
set
};
property bool manageDisplay { get { return (bool)manageDisplay; } set { manageDisplay = value; } };
- property char * text
+ property const char * text
{
property_category $"Deprecated"
watchable
// creationActivation = doNothing;
ToolTip toolTip;
- public property String toolTip
+ public property const String toolTip
{
property_category $"Appearance"
set
public class Percentage : float
{
- char * OnGetString(char * string, float * fieldData, bool * needClass)
+ const char * OnGetString(char * string, float * fieldData, bool * needClass)
{
int c;
int last = 0;
}
};
-public void ApplySkin(Class c, char * name, void ** vTbl)
+public void ApplySkin(Class c, const char * name, void ** vTbl)
{
char className[1024];
Class sc;
public void UnapplySkin(Class c)
{
- char className[1024];
- Class sc;
subclass(Window) wc = (subclass(Window))c;
- subclass(Window) base = (subclass(Window))c.base;
OldLink d;
if(wc.pureVTbl && c._vTbl != wc.pureVTbl)