Ñåññèè èñïîëíåíèÿ ïðîåêòîâ -- Âûïîëíåíî
Öåëÿìè äàííîãî ýòàïà ÿâëÿåòñÿ:
- Ðåàëèçàöèÿ ñåàíñîâ èñïîëíåíèÿ ïðîåêòîâ íà óðîâíå ìîäåëè äàííûõ ÑÂÓ, â ìîäóëå UI.VCAEngine:
- Ôîðìèðîâàíèå èåðàðõè÷åñêîãî äåðåâà âèäæåòîâ êîíå÷íîé âèçóàëèçàöèè íà îñíîâå ïðîåêòà äëÿ êîòîðîãî îòêðûâàåòñÿ ñåàíñ.
- Ôîðìèðîâàíèå êàäðîâ çíà÷åíèé äëÿ ïðîöåäóð îáñ÷¸òà âèäæåòîâ êîíå÷íîé âèçóàëèçàöèè.
- Îáðàáîòêà ññûëîê íà ïàðàìåòðû èñòî÷íèêîâ äàííûõ OpenSCADA.
- Ðåàëèçàöèÿ èåðàðõè÷åñêîãî îáñ÷¸òà ïðîöåäóð è îáíîâëåíèÿ ññûëîê âèäæåòîâ.
- Ôîðìèðîâàíèå ìåõàíèçìà ïðîõîæäåíèÿ è îáðàáîòêè ñîáûòèé ïî èåðàðõè÷åñêîìó äåðåâó.
- Ðåàëèçàöèÿ âèçóàëèçàöèè ñåàíñîâ ïðîåêòîâ â ìîäóëå ïðåäñòàâëåíèÿ UI.Vision(QT), êàê ïîëíîöåííîãî ïîëüçîâàòåëüñêîãî èíòåðôåéñà ñ ýëåìåíòàìè âèçóàëèçàöèè äèíàìèêè, èñòîðèè è óïðàâëåíèÿ:
- Ôîðìèðîâàíèå îêíà èñïîëíåíèÿ ïðîåêòà (RunTime).
- Âèçóàëèçàöèÿ êàäðîâ ïðîåêòà â ðåæèìå "RunTime", ñ ïåðèîäè÷åñêèì îáíîâëåíèåì ñîäåðæèìîãî.
- Ðåàëèçàöèÿ ïåðåäà÷è è îáðàáîòêè ñîáûòèé.
- Ðåàëèçàöèÿ ìåõàíèçìà ïåðåêëþ÷åíèÿ/îòêðûòèÿ/çàìåùåíèÿ/íàâèãàöèè ïî ñòðàíèöàì ïðîåêòà ñ ó÷¸òîì ñöåíàðèåâ îáðàáîòêè.
Íà äàííîì ýòàïå áûë äîáàâëåí ìåõàíèçì èñïîëíåíèÿ ïðîåêòà â ñåàíñàõ ìîäåëè äàííûõ ìîäóëÿ VCAEngine, à òàêæå âèçóàëèçàöèÿ ñåàíñà ïðîåêòà, ðåæèì "RunTime", â ìîäóëå âèçóàëèçàöèè íà áèáëèîòåêå QT Vision, ñ ýëåìåíòàìè îáíîâëåíèÿ äàííûõ è èíòåðàêòèâíîãî âçàèìîäåéñòâèÿ ñ ïîëüçîâàòåëåì.
Ôîðìèðîâàíèå èåðàðõè÷åñêîãî äåðåâà âèäæåòîâ êîíå÷íîé âèçóàëèçàöèè íà îñíîâå ïðîåêòà äëÿ êîòîðîãî îòêðûâàåòñÿ ñåàíñ.
 ñîîòâåòñòâèè ñ ðèñ.6 è ðèñ.7 îáúåêòû ñåññèè ïðîåêòà íàñëåäóþòñÿ îò àáñòðàêòíîãî îáúåêòà Widget è èñïîëüçóþò ñîîòâåòñòâóþùèå îáúåêòû ïðîåêòà. Òàê, ñåññèÿ (Session) èñïîëüçóåò ïðîåêò (Project) è ôîðìèðóåò ðàçâ¸ðíóòîå äåðåâî íà îñíîâå íåãî. Ñòðàíèöà ïðîåêòà Page ïðÿìî èñïîëüçóåòñÿ ñòðàíèöåé ñåññèè SessPage. Îñòàëüíûå îáúåêòû (SessWdg) ðàçâîðà÷èâàþòñÿ â ñîîòâåòñòâèè ñ èåðàðõèåé ýëåìåíòîâ ñòðàíèöû (ðèñ.7).
 äîïîëíåíèè ê ñòàíäàðòíûì ñâîéñòâàì àáñòðàêòíîãî âèäæåòà (Widget) ýëåìåíòû ñòðàíèöû, è ñàìè ñòðàíèöû, ñåññèè ïîëó÷àþò ñâîéñòâà: õðàíåíèÿ êàäðà çíà÷åíèé âû÷èñëèòåëüíîé ïðîöåäóðû, îáñ÷¸òà ïðîöåäóð è ìåõàíèçì îáðàáîòêè ñîáûòèé. Ñòðàíèöû ñåññèè, â äîïîëíåíèå êî âñåìó, ñîäåðæàò êîíòåéíåð ñëåäóþùèõ ïî èåðàðõèè ñòðàíèö. Ñåññèÿ â öåëîì îáñ÷èòûâàåòñÿ ñ óêàçàííîé ïåðèîäè÷íîñòüþ è â ïîñëåäîâàòåëüíîñòè:
- "Ñòðàíèöà âåðõíåãî óðîâíÿ" -> "Ñòðàíèöà íèæíåãî óðîâíÿ"
- "Âèäæåò íèæíåãî óðîâíÿ" -> "Âèäæåò âåðõíåãî óðîâíÿ"
Òàêàÿ ïîëèòèêà ïîçâîëÿåò îáõîäèòü ñòðàíèöû â ñîîòâåòñòâèè ñ èåðàðõèåé, à ñîáûòèÿì â âèäæåòàõ âñïëûâàòü íà âåðõ çà îäíó èòåðàöèþ.
 ñåññèè ðåàëèçîâàíà ïîääåðæêà ñïåöèàëüíûõ ñâîéñòâ ñòðàíèö:
Container - ñòðàíèöà ÿâëÿåòñÿ êîíòåéíåðîì äëÿ íèæåëåæàùèõ ñòðàíèö;
Template - ñòðàíèöà ÿâëÿåòñÿ øàáëîíîì äëÿ íèæåëåæàùèõ ñòðàíèö;
Empty - ïóñòàÿ, íå àêòèâíàÿ ñòðàíèöà, ýòî ñâîéñòâî èñïîëüçóåòñÿ ñîâìåñòíî ñî ñâîéñòâîì Container äëÿ îðãàíèçàöèè ëîãè÷åñêèõ êîíòåéíåðîâ.
Íà îñíîâå ýòèõ ñâîéñòâ ðåàëèçîâàíû ñëåäóþùèå òèïû ñòðàíèö:
Standard -- Ñòàíäàðòíàÿ ñòðàíèöà (íå óñòàíîâëåíî íè îäíî èç ñâîéñòâ). ßâëÿåòñÿ ïîëíîöåííîé êîíå÷íîé ñòðàíèöåé.
Container -- Ïîëíîöåííàÿ ñòðàíèöà ñî ñâîéñòâîì êîíòåéíåðà (Container).
Logical container -- Ëîãè÷åñêèé êîíòåéíåð, ôàêòè÷åñêè íå ÿâëÿþùèéñÿ ñòðàíèöåé (Container|Empty). Âûïîëíÿåò ñâîéñòâî ïðîìåæóòî÷íîãî è ãðóïïèðóþùåãî ýëåìåíòà â äåðåâå ñòðàíèö.
Template -- Ñòðàíèöà øàáëîí (Template). ×èñòàÿ øàáëîííàÿ ñòðàíèöà èñïîëüçóåòñÿ äëÿ îïèñàíèÿ îáùèõ ñâîéñòâ è äîîïðåäåëåíèÿ èõ â ÷àñòíîì ïîðÿäêå âî âëîæåííûõ ñòðàíèöàõ.
Container and template -- Ñòðàíèöà øàáëîí è êîíòåéíåð (Template|Container). Ñîâìåùàåò ôóíêöèè øàáëîíà è êîíòåéíåðà.
Ôîðìèðîâàíèå êàäðîâ çíà÷åíèé äëÿ ïðîöåäóð îáñ÷¸òà âèäæåòîâ êîíå÷íîé âèçóàëèçàöèè.
 ðàçäåëå âûøå ìû óæå îòìå÷àëè, ÷òî âèäæåò ñåññèè ñîäåðæèò êàäð çíà÷åíèé ïðîöåäóðû îáñ÷¸òà. Ýòîò êàäð èíèöèèðóåòñÿ è èñïîëüçóåòñÿ â ñëó÷àå íàëè÷èÿ ïðîöåäóðû îáñ÷¸òà.  ìîìåíò èíèöèàëèçàöèè ñîçäà¸òñÿ ïåðå÷åíü ïàðàìåòðîâ ïðîöåäóðû è âûïîëíÿåòñÿ êîìïèëÿöèÿ ïðîöåäóðû ñ ýòèìè ïàðàìåòðàìè, â ìîäóëå ðåàëèçóþùåì âûáðàííûé ÿçûê ïðîãðàììèðîâàíèÿ è çàêîäèðîâàííûì ïîëíûì èìåíåì âèäæåòà. Ñêîìïèëèðîâàííàÿ ôóíêöèÿ ïîäêëþ÷àåòñÿ ê êàäðó çíà÷åíèé ïðîöåäóðû îáñ÷¸òà. Äàëåå âûïîëíÿåòñÿ âû÷èñëåíèå ñ ïåðèîäè÷íîñòüþ ñåññèè.
Âû÷èñëåíèå, è îáðàáîòêà âèäæåòà â öåëîì, âûïîëíÿåòñÿ â ñëåäóþùåé ïîñëåäîâàòåëüíîñòè:
- âûáèðàåòñÿ ñîáûòèÿ, äîñòóïíûå íà ìîìåíò âû÷èñëåíèÿ èç àòðèáóòà "event", âèäæåòà;
- ñîáûòèÿ çàãðóæàþòñÿ â ïàðàìåòð "event" êàäðà âû÷èñëåíèÿ;
- çàãðóæàþòñÿ çíà÷åíèÿ ïî âõîäíûì ñâÿçÿì â êàäð âû÷èñëåíèÿ;
- çàãðóæàþòñÿ çíà÷åíèÿ ñïåöèàëüíûõ ïåðåìåííûõ â êàäð âû÷èñëåíèÿ (f_frq, f_start è f_stop);
- çàãðóæàþòñÿ çíà÷åíèÿ âûáðàííûõ ïàðàìåòðîâ âèäæåòà â êàäð âû÷èñëåíèÿ;
- âû÷èñëåíèå;
- âûãðóçêà çíà÷åíèé êàäðà âû÷èñëåíèÿ â âûáðàííûå ïàðàìåòðû âèäæåòà;
- âûãðóçêà çíà÷åíèé êàäðà âû÷èñëåíèÿ ïî âûõîäíûì ñâÿçÿì;
- âûãðóçêà ñîáûòèÿ èç ïàðàìåòðà "event", êàäðà âû÷èñëåíèÿ;
- îáðàáîòêà ñîáûòèé è ïåðåäà÷à íå îáðàáîòàííûõ íà óðîâåíü âûøå.
Îáðàáîòêà ññûëîê íà ïàðàìåòðû èñòî÷íèêîâ äàííûõ OpenSCADA.
Ïðè èñïîëíåíèè âèäæåòà ñåàíñà íåîáõîäèìî âûïîëíåíèå îáðàáîòêè ññûëîê. Íà äàííûé ìîìåíò ïîäêëþ÷åíèå ïî ññûëêàì âûïîëíÿåòñÿ â ìîìåíò âû÷èñëåíèÿ, ÷òî ÿâëÿåòñÿ íå áûñòðîé îïåðàöèåé. Ðåàëèçàöèÿ îáðàáîòêè ññûëîê áóäåò ïåðåñìîòðåíà è îïòèìèçèðîâàíà â äàëüíåéøåì.
Çàëîæåíà ïîääåðæêà ñëåäóþùèõ òèïîâ ññûëîê:
- Çíà÷åíèå êîíñòàíòû ("V"). Ïåðåìåííàÿ äëÿ îïðåäåëåíèÿ â ìîìåíò êîíôèãóðàöèè ñòðàíèöû â ïðîåêòå.
- Àòðèáóò ïàðàìåòðà ïîäñèñòåìû "Ñáîð äàííûõ" ("P"). Ìåõàíèçì äîñòóïà ê çíà÷åíèÿì ïàðàìåòðà ïîäñèñòåìû "Ñáîð äàííûõ" ñèñòåìû OpenSCADA.
- Àòðèáóò âëîæåííîãî âèäæåòà ("W"). Âíóòðåííÿÿ ïðÿìàÿ ñâÿçü ìåæäó âëîæåííûìè âèäæåòàìè.
Íà äàííûé ìîìåíò ðåàëèçîâàíû ïåðâûå äâà òèïà ññûëîê. Ïîñëåäíÿÿ áóäåò ðåàëèçîâàíà âìåñòå ñ ðåàëèçàöèåé áàçîâîãî âèäæåòà "Link".
Ôîðìèðîâàíèå îêíà èñïîëíåíèÿ ïðîåêòà (RunTime).
Íà ñòîðîíå âèçóàëèçàöèè (ìîäóëü Vision), äëÿ âèçóàëèçàöèè ïðîöåññà èñïîëíåíèÿ ïðîåêòà, ðåàëèçîâàí îáúåêò VisRun. Ïðè çàïóñêå îí øë¸ò çàïðàñ íà ñîçäàíèå è èíèöèàëèçàöèþ ñåññèè. Äàëåå âûïîëíÿåòñÿ çàïðîñ íà ïåðå÷åíü îòêðûòûõ ñòðàíèö. Èñõîäÿ èç èíôîðìàöèè îá îòêðûòûõ ñòðàíèöàõ VisRun è èõ ñâÿçíîñòè ôîðìèðóåòñÿ ðåçóëüòèðóþùèé èíòåðôåéñ. Íà ðèñ. 11 ïðèâåä¸í ïðèìåð êëàññè÷åñêîãî SCADA èíòåðôåéñà ñ îáúåêòàìè ñèãíàëèçàöèè, ãäå ãëàâíîå îêíî ñîäåðæèò ñòðàíèöó âíóòðè, êîòîðàÿ çàìåùàåòñÿ ïî íàæàòèþ íà êíîïêè îáúåêòîâ ñèãíàëèçàöèè è ëèñòàíèÿ.
Ðèñ.11 Îêíî âèçóàëèçàöèè èñïîëíåíèÿ ïðîåêòà. Ðåæèì "RunTime".
Âèçóàëèçàöèÿ êàäðîâ ïðîåêòà â ðåæèìå "RunTime", ñ ïåðèîäè÷åñêèì îáíîâëåíèåì ñîäåðæèìîãî.
Ðåàëèçîâàíî îáíîâëåíèå ñîäåðæèìîãî îòêðûòûõ ñòðàíèö èíòåðôåéñà âèçóàëèçàöèè ñ ïåðèîäè÷íîñòüþ èñïîëíåíèÿ ñåññèè ïðîåêòà.  ïðîöåññå îáíîâëåíèÿ âûïîëíÿåòñÿ:
- çàïðîñ ñïèñêà îòêðûòûõ ñòðàíèö ó ìîäåëè è ïðîâåðêà ñîîòâåòñòâèÿ ðåàëüíî îòêðûòûõ ñòðàíèö ýòîìó ñïèñêó;
- çàïðîñ èçìåí¸ííûõ äàííûõ ïî êàæäîé ñòðàíèöå è å¸ âèäæåòó;
- îáíîâëåíèå ñîäåðæèìîãî ñòðàíèö è èõ âèäæåòîâ â ñîîòâåòñòâèè ñ ïîëó÷åííûìè èçìåíåííûìè äàííûìè.
Ïî çàêðûòèþ "RunTime" îêíà ïðîèçâîäèòñÿ è çàêðûòèå ñåññèè ïðîåêòà â ìîäåëè äàííûõ.  äàëüíåéøåì áóäåò ðåàëèçîâàíà âîçìîæíîñòü ïîäêëþ÷åíèÿ ê ðàíåå îòêðûòîé ñåññèè è îòêëþ÷åíèå îò ñåññèè, áåç å¸ çàêðûòèÿ.
Ìåõàíèçì çàïðîñà òîëüêî èçìåí¸ííûõ äàííûõ îñíîâàí íà àáñîëþòíîì ñ÷¸ò÷èêå èñïîëíåíèÿ ñåññèè. Ïðè âíåñåíèè ðåàëüíûõ èçìåíåíèé â àòðèáóòû âèäæåòîâ âûïîëíÿåòñÿ çàïîìèíàíèå çíà÷åíèÿ ýòîãî ñ÷¸ò÷èêà, ÷òî è ïîçâîëÿåò èäåíòèôèöèðîâàòü èçìåí¸ííûå àòðèáóòû. Òàêîé ïîäõîä ïîçâîëÿåò ïîâûñèòü ïðîèçâîäèòåëüíîñòü è óìåíüøèòü íàãðóçêó íà òðàôèê â ñëó÷àå äîñòóïà ê ìîäåëè ÷åðåç ñåòü.
Ðåàëèçàöèÿ ïåðåäà÷è è îáðàáîòêè ñîáûòèé.
Âèçóàëèçàòîð ñåññèè ("RunTime"), â âèäó ñâîåãî íåïîñðåäñòâåííîãî êîíòàêòà ñ ïîëüçîâàòåëåì, ñîáèðàåò ðàçëè÷íûå ñîáûòèÿ. ×àñòü ñîáûòèé îáðàáàòûâàåòñÿ îáðàçàìè áàçîâûõ âèäæåòîâ (Text, Box, Document è ò.ä.), â ðåçóëüòàòå ÷åãî ìîãóò ôîðìèðîâàòüñÿ äðóãèå ñîáûòèÿ. Äðóãàÿ ÷àñòü ïðÿìî ïåðåäà¸òñÿ â ìîäåëü äàííûõ, ãäå îíè è îáðàáàòûâàþòñÿ.
 ìîäåëü äàííûõ ñîáûòèÿ ïåðåäàþòñÿ ñðàçó ïîñëå ïîëó÷åíèÿ, ãäå îíè ñîáèðàþòñÿ â àòðèáóòå âèäæåòà "event" äî ìîìåíòà ñëåäóþùåé èòåðàöèè èñïîëíåíèÿ ñåññèè. Äàëåå, â ïðîöåññå îáñ÷¸òà ñåññèè, ñîáûòèÿ èçâëåêàþòñÿ èç àòðèáóòà "event" è îáðàáàòûâàþòñÿ â ïðîöåäóðå âèäæåòà èëè â ñîîòâåòñòâèè ñî ñöåíàðèåì â àòðèáóòå "evProc". Íå îáðàáîòàííûå ñîáûòèå ïîäíèìàþòñÿ ê âûøåñòîÿùåìó âèäæåòó ìîäåëè.
Ðåàëèçàöèÿ ìåõàíèçìà ïåðåêëþ÷åíèÿ/îòêðûòèÿ/çàìåùåíèÿ/íàâèãàöèè ïî ñòðàíèöàì ïðîåêòà ñ ó÷¸òîì ñöåíàðèåâ îáðàáîòêè.
Ïåðåêëþ÷åíèå, îòêðûòèå, çàìåùåíèå è íàâèãàöèÿ ïî ñòðàíèöàì ðåàëèçîâàíî íà îñíîâå îáðàáîòêè ñîáûòèé ïî ñöåíàðèþ, â àòðèáóòå àêòèâíîãî âèäæåòà "evProc". Ñöåíèðèé ýòîãî àòðèáóòà çàïèñûâàåòñÿ â âèäå ñïèñêà êîìàíä ñ ñèíòàêñèñîì: <event>:<srcWdg>:<com>:<prm>
ãäå:
event -- îæèäàåìîå ñîáûòèå;
srcWdg -- äî÷åðíèé âèäæåò - èñòî÷íèê ñîáûòèÿ
com -- êîìàíäà ñåññèè;
prm -- ïàðàìåòð êîìàíäû;
Ðåàëèçîâàíû ñëåäóþùèå êîìàíäû:
open -- Îòêðûòèå ñòðàíèöû. Îòêðûâàåìàÿ ñòðàíèöà óêàçûâàåòñÿ â ïàðàìåòðå prm êàê íà ïðÿìóþ, òàê è â âèäå øàáëîíà (íàïðèìåð: /pg_so/1/*/*).
next -- Îòêðûòèå ñëåäóþùåé ñòðàíèöû. Îòêðûâàåìàÿ ñòðàíèöà óêàçûâàåòñÿ â ïàðàìåòðå prm êàê íà ïðÿìóþ, òàê è â âèäå øàáëîíà (íàïðèìåð: /pg_so/*/*/$).
prev -- Îòêðûòèå ïðåäûäóùåé ñòðàíèöû. Îòêðûâàåìàÿ ñòðàíèöà óêàçûâàåòñÿ â ïàðàìåòðå prm êàê íà ïðÿìóþ, òàê è â âèäå øàáëîíà (íàïðèìåð: /pg_so/*/*/$).
Ñïåöèàëüíûå ñèìâîëû øàáëîíà ðàñøèôðîâûâàþòñÿ ñëåäóþùèì îáðàçîì:
pg_so -- Ïðÿìîå èìÿ òðåáóåìîé ñòðàíèöû, ñ ïðåôèêñîì. Òðåáóåò îáÿçàòåëüíîãî ñîîòâåòñòâèÿ è èñïîëüçóåòñÿ äëÿ èäåíòèôèêàöèè ïðåäûäóùåé îòêðûòîé ñòðàíèöû.
1 -- Èìÿ íîâîé ñòðàíèöû â îáùåì ïóòè, áåç ïðåôèêñà. Èìÿ ïðåäûäóùåé ñòðàíèöû èãíîðèðóåòñÿ.
* -- Ñòðàíèöà áåð¸òñÿ ñ èìåíè ïðåäûäóùåé îòêðûòîé ñòðàíèöû èëè ïîäñòàâëÿåòñÿ ïåðâàÿ äîñòóïíàÿ ñòðàíèöà, åñëè ïðåäûäóùàÿ îòêðûòàÿ ñòðàíèöà îòñóòñòâóåò.
$ -- Óêàçûâàåò íà ìåñòî îòêðûòîé ñòðàíèöû îòíîñèòåëüíî êîòîðîé íåîáõîäèìî èñêàòü ñëåäóþùóþ èëè ïðåäûäóùóþ.
Äëÿ ïîíèìàíèÿ ðàáîòû ìåõàíèçìà øàáëîíîâ ïðèâåä¸ì íåñêîëüêî ðåàëüíûõ ïðèìåðîâ:
Ïåðåêëþ÷åíèå îáúåêòà ñèãíàëèçàöèè:Êîìàíäà: open:/pg_so/2/*/*
Áûëî: /pg_so/pg_1/pg_mn/pg_1
Ñòàëî: /pg_so/pg_2/pg_mn/pg_1
Ïåðåêëþ÷åíèå âèäà:
Êîìàíäà: open:/pg_so/*/gkadr/*
Áûëî: /pg_so/pg_1/pg_mn/pg_1
Ñòàëî: /pg_so/pg_1/pg_gkadr/pg_1
Ñëåäóþùàÿ/ïðåäûäóùàÿ ñòðàíèöà âèäà:
Êîìàíäà: next:/pg_so/*/*/$
Áûëî: /pg_so/pg_1/pg_mn/pg_1
Ñòàëî: /pg_so/pg_1/pg_mn/pg_2
 ñâÿçêå ñ âûøå îïèñàííûì ìåõàíèçìîì, íà ñòîðîíå âèçóàëèçàöèè (RunTime), ïîñòðîåíà ëîãèêà, ðåãóëèðóþùàÿ êàêèì îáðàçîì îòêðûâàòü ñòðàíèöû. Ëîãèêà ïîñòðîåíà íà ñëåäóþùèõ àòðèáóòàõ áàçîâîãî ýëåìåíòà "Box":
pgOpen -- Ïðèçíàê "Ñòðàíèöà îòêðûòà".
pgNoOpenProc -- Ïðèçíàê "Èñïîëíÿòü ñòðàíèöó äàæå åñëè îíà íå îòêðûòà".
pgOpenSrc -- Ñîäåðæèò àäðåñ âèäæåòà èëè ñòðàíèöû, îòêðûâøåé òåêóùóþ.  ñëó÷àå âëîæåííîãî êîíòåéíåðíîãî âèäæåòà çäåñü ñîäåðæèòñÿ àäðåñ âêëþ÷àåìîé ñòðàíèöû.
pgGrp -- Ãðóïïà ñòðàíèö. Èñïîëüçóåòñÿ äëÿ ñâÿçêè êîíòåéíåðîâ ñòðàíèö ñî ñòðàíèöàìè â îäíîé ãðóïïå.
Ëîãèêà îïðåäåëåíèÿ ñïîñîáà îòêðûòèÿ ñòðàíèö ðàáîòàåò ñëåäóþùèì îáðàçîì:
- åñëè ñòðàíèöà èìååò ãðóïïó "main" èëè ñîâïàäàåò ñ ãðóïïîé ñòðàíèöû â ãëàâíîì îêíå èëè íåò ñòðàíèöû íà ãëàâíîì îêíå, òî îòêðûâàòü ñòðàíèöó â ãëàâíîì îêíå;
- åñëè ñòðàíèöà èìååò ãðóïïó, êîòîðàÿ ñîâïàäàåò ñ ãðóïïîé îäíîãî èç êîíòåéíåðîâ òåêóùåé ñòðàíèöû, òî îòêðûòü â ýòîì êîíòåéíåðå;
- åñëè èñòî÷íèê îòêðûòèÿ ñòðàíèöû ñîâïàäàåò ñ òåêóùåé ñòðàíèöåé, òî îòêðûòü â âèäå äîïîëíèòåëüíîãî îêíà íàä òåêóùåé ñòðàíèöåé;
- ïåðåäàòü âûçîâ íà çàïðîñ îòêðûòèÿ äîïîëíèòåëüíûì îêíàì ñ îáðàáîòêîé ó êàæäîãî ïî ïåðâûì òðåì ïóíêòàì;
- åñëè íè êòî èç ðîäñòâåííûõ îêîí íå îòêðûë íîâóþ ñòðàíèöó òî îòêðûòü å¸ êàê ðîäñòâåííîå îêíî ãëàâíîãî îêíà.
Ñîâîêóïíîñòü âñåõ ýòèõ ìåõàíèçìîâ óæå ñåé÷àñ ïîçâîëÿåò ñòðîèòü ñëîæíûå, ìíîãîóðîâíåâûå è ìíîãîîêîííûå èíòåðôåéñû ïîëüçîâàòåëÿ.