mirror of
https://github.com/reactos/reactos.git
synced 2025-08-02 06:05:48 +00:00
Still working on making dflat32 a dll. Alot of this will be cleaned up in the
next few weeks. I'm going through the DFLAT api doc and fixing the export names and then going to try to build a simple hello dflat application. svn path=/trunk/; revision=2844
This commit is contained in:
parent
531d8f275d
commit
81345fd691
37 changed files with 7650 additions and 132 deletions
149
rosapps/lib/dflat32/lists.c
Normal file
149
rosapps/lib/dflat32/lists.c
Normal file
|
@ -0,0 +1,149 @@
|
|||
/* --------------- lists.c -------------- */
|
||||
|
||||
#include "dflat32/dflat.h"
|
||||
|
||||
/* ----- set focus to the next sibling ----- */
|
||||
void SetNextFocus (void)
|
||||
{
|
||||
if (inFocus != NULL)
|
||||
{
|
||||
DFWINDOW wnd1 = inFocus, pwnd;
|
||||
while (TRUE)
|
||||
{
|
||||
pwnd = GetParent(wnd1);
|
||||
if (NextWindow(wnd1) != NULL)
|
||||
wnd1 = NextWindow(wnd1);
|
||||
else if (pwnd != NULL)
|
||||
wnd1 = FirstWindow(pwnd);
|
||||
if (wnd1 == NULL || wnd1 == inFocus)
|
||||
{
|
||||
wnd1 = pwnd;
|
||||
break;
|
||||
}
|
||||
if (GetClass(wnd1) == STATUSBAR || GetClass(wnd1) == MENUBAR)
|
||||
continue;
|
||||
if (isVisible(wnd1))
|
||||
break;
|
||||
}
|
||||
if (wnd1 != NULL)
|
||||
{
|
||||
while (wnd1->childfocus != NULL)
|
||||
wnd1 = wnd1->childfocus;
|
||||
if (wnd1->condition != ISCLOSING)
|
||||
DfSendMessage(wnd1, SETFOCUS, TRUE, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* ----- set focus to the previous sibling ----- */
|
||||
void SetPrevFocus(void)
|
||||
{
|
||||
if (inFocus != NULL)
|
||||
{
|
||||
DFWINDOW wnd1 = inFocus, pwnd;
|
||||
while (TRUE)
|
||||
{
|
||||
pwnd = GetParent(wnd1);
|
||||
if (PrevWindow(wnd1) != NULL)
|
||||
wnd1 = PrevWindow(wnd1);
|
||||
else if (pwnd != NULL)
|
||||
wnd1 = LastWindow(pwnd);
|
||||
if (wnd1 == NULL || wnd1 == inFocus)
|
||||
{
|
||||
wnd1 = pwnd;
|
||||
break;
|
||||
}
|
||||
if (GetClass(wnd1) == STATUSBAR)
|
||||
continue;
|
||||
if (isVisible(wnd1))
|
||||
break;
|
||||
}
|
||||
if (wnd1 != NULL)
|
||||
{
|
||||
while (wnd1->childfocus != NULL)
|
||||
wnd1 = wnd1->childfocus;
|
||||
if (wnd1->condition != ISCLOSING)
|
||||
DfSendMessage(wnd1, SETFOCUS, TRUE, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* ------- move a window to the end of its parents list ----- */
|
||||
void ReFocus(DFWINDOW wnd)
|
||||
{
|
||||
if (GetParent(wnd) != NULL)
|
||||
{
|
||||
RemoveWindow(wnd);
|
||||
AppendWindow(wnd);
|
||||
ReFocus(GetParent(wnd));
|
||||
}
|
||||
}
|
||||
|
||||
/* ---- remove a window from the linked list ---- */
|
||||
void RemoveWindow(DFWINDOW wnd)
|
||||
{
|
||||
if (wnd != NULL)
|
||||
{
|
||||
DFWINDOW pwnd = GetParent(wnd);
|
||||
|
||||
if (PrevWindow(wnd) != NULL)
|
||||
NextWindow(PrevWindow(wnd)) = NextWindow(wnd);
|
||||
if (NextWindow(wnd) != NULL)
|
||||
PrevWindow(NextWindow(wnd)) = PrevWindow(wnd);
|
||||
if (pwnd != NULL)
|
||||
{
|
||||
if (wnd == FirstWindow(pwnd))
|
||||
FirstWindow(pwnd) = NextWindow(wnd);
|
||||
if (wnd == LastWindow(pwnd))
|
||||
LastWindow(pwnd) = PrevWindow(wnd);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* ---- append a window to the linked list ---- */
|
||||
void AppendWindow(DFWINDOW wnd)
|
||||
{
|
||||
if (wnd != NULL)
|
||||
{
|
||||
DFWINDOW pwnd = GetParent(wnd);
|
||||
if (pwnd != NULL)
|
||||
{
|
||||
if (FirstWindow(pwnd) == NULL)
|
||||
{
|
||||
FirstWindow(pwnd) = wnd;
|
||||
LastWindow(pwnd) = wnd;
|
||||
PrevWindow(wnd) = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
NextWindow(LastWindow(pwnd)) = wnd;
|
||||
PrevWindow(wnd) = LastWindow(pwnd);
|
||||
LastWindow(pwnd) = wnd;
|
||||
}
|
||||
}
|
||||
NextWindow(wnd) = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* if document windows and statusbar or menubar get the focus,
|
||||
* pass it on
|
||||
*/
|
||||
void SkipApplicationControls(void)
|
||||
{
|
||||
BOOL EmptyAppl = FALSE;
|
||||
int ct = 0;
|
||||
while (!EmptyAppl && inFocus != NULL)
|
||||
{
|
||||
DFCLASS cl = GetClass(inFocus);
|
||||
if (cl == MENUBAR || cl == STATUSBAR)
|
||||
{
|
||||
SetPrevFocus();
|
||||
EmptyAppl = (cl == MENUBAR && ct++);
|
||||
}
|
||||
else
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* EOF */
|
Loading…
Add table
Add a link
Reference in a new issue