Mercurial > ~dholland > hg > ag > index.cgi
diff anagram/guisupport/windowreg.cpp @ 0:13d2b8934445
Import AnaGram (near-)release tree into Mercurial.
author | David A. Holland |
---|---|
date | Sat, 22 Dec 2007 17:52:45 -0500 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/anagram/guisupport/windowreg.cpp Sat Dec 22 17:52:45 2007 -0500 @@ -0,0 +1,233 @@ +/* + * AnaGram, A System for Syntax Directed Programming + * Copyright 1997-2002 Parsifal Software. All Rights Reserved. + * See the file COPYING for license and usage terms. + * + * windowreg.cpp + */ + +#include "ctrlpanel.hpp" // sigh... XXX (for syntaxFileId/syntaxFileRect) +#include "vaclgui.hpp" // XXX (for cascadeOrigin/cascadeOffset) +#include "windowreg.h" + +//#define INCLUDE_LOGGING +#include "log.h" + + +void WindowRegistry::registerId(AgFrame *window, + AgString title, AgAction action) { + LOGSECTION("WindowRegistry::registerId"); + int id = window->id(); + int first = 0, last = registry.size(); + LOGV(id) LCV(title.pointer()) LCV(last); + int firstClone = -1; + int firstViewNumber = 0; + int maxView = 1; + + while (first < last) { + registry[first++].isActive = 0; + } + first = 0; + while (first < last) { + WindowRecord &windowRecord = registry[first]; + if (windowRecord.id == id) { + windowRecord.action = action; + windowRecord.title = title; + windowRecord.window = window; + windowRecord.isActive = 1; + return; + } + if (windowRecord.title == title) { + int viewNumber = windowRecord.window->windowTitle.viewNumber(); + if (firstClone == -1) { + firstClone = first; + firstViewNumber = viewNumber; + } + if (maxView < viewNumber) { + maxView = viewNumber; + } + } + first++; + } + LOGV(maxView); + registry.push(WindowRecord()); + LOGV(first) LCV(registry.size()); + WindowRecord &windowRecord = registry[first]; + LOGV((int) ®istry[first]); + LOGV((int) &windowRecord); + windowRecord.id = id; + windowRecord.action = action; + windowRecord.title = title; + windowRecord.window = window; + windowRecord.isActive = 1; + if (firstClone == -1) { + return; + } + if (firstViewNumber == 0) { + LOGV(firstClone); + registry[firstClone].window->windowTitle.setViewNumber(1); + } + window->windowTitle.setViewNumber(maxView+1); + LOGS("registration complete"); +} + +void WindowRegistry::refresh(AgString title) { + LOGSECTION("WindowRegistry::refresh"); + int first = 0, last = registry.size(); + LOGV(title.pointer()) LCV(last); + while (first < last) { + WindowRecord &windowRecord = registry[first]; + if (windowRecord.title == title) { + windowRecord.window->refresh(); + } + first++; + } +} + +void WindowRegistry::remove(int id) { + LOGSECTION("WindowRegistry::remove"); + LOGV(id); + int first = 0, last = registry.size(); + while (first < last) { + if (registry[first].id == id) { + LOGV(registry[first].title.pointer()); + if (id == syntaxFileId) { + LOGV(syntaxFileId); + LOGV(syntaxFileRect.asString()); + syntaxFileRect = registry[first].window->rect(); + LOGV(syntaxFileRect.asString()); + syntaxFileId = 0; + } + last--; + while (first < last) { + registry[first] = registry[first+1]; + first++; + } + registry.pop(); + break; + } + first++; + } + if (registry.size() == 0) { + cascadeOffset = cascadeOrigin; + } +} + +AgFrame *WindowRegistry::find(AgString title) { + LOGSECTION("WindowRegistry::find(AgString)"); + LOGV(title.pointer()); + int first = 0, last = registry.size(); + LOGV(last); + while (first < last) { + LOGV(registry[first].title.pointer()); + if (registry[first].title == title) { + return registry[first].window; + } + first++; + } + return NULL; +} + +AgFrame *WindowRegistry::find(int id) { + LOGSECTION("WindowRegistry::find(int)"); + int first = 0, last = registry.size(); + while (first < last) { + LOGV(registry[first].id); + LOGV(registry[first].title.pointer()); + if (registry[first].id == id) { + return registry[first].window; + } + first++; + } + return NULL; +} + +AgString WindowRegistry::getTitle(int id) { + int first = 0, last = registry.size(); + while (first < last) { + if (registry[first].id == id) { + return registry[first].title; + } + first++; + } + return AgString(); +} + +/* +void WindowRegistry::bubbleUp(int id) { + LOGSECTION("WindowRegistry::bubbleUp"); + if (cascadeFlag) return; + int first = 0, last = registry.size() - 1; + while (first < last) { + LOGV(registry[first].id) LCV(registry[first].title.pointer()); + if (registry[first].id == id) { + LOGS("found it"); + WindowRecord save = registry[first]; + for (int i = first; i < last; i++) registry[i] = registry[i+1]; + registry[last] = save; + return; + } + first++; + } +} +*/ + +void WindowRegistry::markActive(int id) { + LOGSECTION("WindowRegistry::markActive"); + if (cascadeFlag) { + return; + } + int first = 0, last = registry.size(); + while (first < last) { + registry[first++].isActive = 0; + } + first = 0; + while (first < last) { + LOGV(registry[first].id) LCV(registry[first].title.pointer()); + if (registry[first].id == id) { + LOGS("found it"); + registry[first].isActive = 1; + return; + } + first++; + } +} + +void WindowRegistry::clearActive() { + LOGSECTION("WindowRegistry::clearActive"); + int first = 0, last = registry.size(); + while (first < last) { + registry[first++].isActive = 0; + } +} + +int WindowRegistry::action(int id) { + LOGSECTION("WindowRegistry::action"); + int first = 0, last = registry.size(); + while (first < last) { + if (registry[first].id == id) { + registry[first].action.perform(); + return 1; + } + first++; + } + LOGS("command not recognized"); + return 0; +} + +int WindowRegistry::action(AgString title) { + LOGSECTION("WindowRegistry::action(AgString)"); + LOGV(title.pointer()); + int first = 0, last = registry.size(); + LOGV(last); + while (first < last) { + LOGV(registry[first].title.pointer()); + if (registry[first].title == title) { + registry[first].action.perform(); + return 1; + } + first++; + } + return 0; +} +