Druhý díl miniseriálu o vytváření uživatelsky definovaných oknech prohlížeče. V dnešním článku se tentokrát budeme věnovat funkcím a vlastnostem modulu Topbar.

V předchozí části jsme si popsali, jak otevřít nové okno a jak jej oprostit od implicitních ovládacích prvků. Dále jsme si vysvětlili principy funkcí hlavní knihovny a strukturu objektů celého okna, jenž jsme nazvali moduly. Dnes si popíšeme nejsložitější z nich – topBar.

Jak je patrné z obrázku z předešlého dílu, tento modul je nahrazením vrchní lišty okna. Obvykle se na něm nachází text s názvem a navigační prvky minimalizace, maximalizace a zavření okna. Další jeho důležitou úlohou je zprostředkování přesunu okna. Všechny tyto funkce je nutné přenést také na vytvářenou náhradu. Začneme všem již známou procedurou získání parametrů (pro zjednodušení je uvedena pouze hlavička).

/// Zacatek kodu modulu topBar
/// Soubor: topBar.htm

/// Procedura ziskani parametru
/// Nastaveni promennych
    down=0; max=0;

Důležitou operací bude samotné vykreslení topBaru. Prvním nezbytným krokem je nastavení atributu scroll v tagu body na hodnotu no, abychom se vyhnuli nežádoucím posuvníkům. Poté přistoupíme k zápisu topBaru, který je tvořen dvěma vnořenými tabulkami, s nichž první reprezentuje okraj, a druhá samotné tělo objektu (tak jak je znáte např. z okolních tabulek Intervalu). Obsah první datové části tabulky včetně názevu okna a dekorativní ikony je celý překryt průhledným obrázkem s absolutní pozicí. Jednak proto aby nedocházelo k změně kursoru při přesunu myši na text názvu okna, a k rušivému označování textu či ovládacích prvků při přesunu okna.V druhé datové části toto není možné aplikovat, neboť musíme mít přístup na jednotlivé ovládací prvky maximalizace a zavření okna (apropos tímto způsobem, lze primitivně chránit obrázky).V kódu je také patrné jakým způsobem se v inline stylech využívají získané parametry.

/// Vytvoreni topBaru
document.write(‚<body topmargin=0 leftmargin=0 scroll=“no“>‘);

// Tabulka c.1 – okraj
document.write(‚<table width=100% height=100% bgcolor=“‚+param[2]+'“ cellpadding=1 cellspacing=0><tr><td>‘);

// Tabulka c.2 – obsah
document.write(‚<table id=“toolbar“ width=100% height=100% bgcolor=“‚+param[0]+'“ border=0 align=right style=“color:’+param[3]+‘; font-size:’+param[4]+‘; font-family:’+param[5]+‘;“ cellpadding=1 cellspacing=1><tr>‘);
// 1. datová část
document.write(‚<td align=left><img align=top src=“logo.gif“><div style=“position:absolute; left:0px; top:0px; width:100%; height:70px; z-index:2; clip:rect(0,100%;70,0);“><img src=none.gif width=100% height=70></div><span style=“color:’+param[4]+‘; font-size:’+param[5]+‘; font-family:’+param[6]+‘;“>’+param[3]+'</span></td>‘);
// 2. datová část
document.write(‚<td align=right width=30><a href=“Javascript: maxOkno();“><img align=top src=“maxgif.gif“ border=0></a><a href=“Javascript: zavriOkno();“><img align=top src=“closegif.gif“ border=0></td></tr></table>‘);

document.write(‚</td></tr></table></body>‘);

Samotný objekt je tedy na světě, nyní mu přiřadíme jednotlivé funkce. Začneme těmi jednoduchými – zavřením a maximalizací okna. První je věc triviální a nemá cenu se ji podrobněji zabývat. Druhá není o moc složitější. Po testování proměnné max, jejichž hodnota (0 nebo 1) říká, zdali je okno již maximalizováno, se provede sekvence příkazů, která okno zvětší na hodnotu rozlišení obrazovky (screen.width, screen.height). Je třeba si také uvědomit, že se nacházíme ve FRAME a k celému oknu musíme přistupovat přes objekt parent.

/// Funkce maximalizace a zavreni okna
function zavriOkno(){parent.self.close();}
function maxOkno()

{
if(max==0) { parent.self.moveTo(2,2); parent.self.resizeTo((parseInt(screen.width)-10), (parseInt(screen.height)-55)); max=1;}
else {parent.self.resizeTo(400,400); max=0;}
}

Poslední vlastností, kterou naše okno bude disponovat bude možnost změny pozice „chytnutím“ za topBar, o kterém jsme si říkali v předchozím odstavci. Tady již půjde o složitější konstrukci. Předně musíme zjistit kdy chce vlastně uživatel okno přesouvat – čili nastavení event událostí.

/// Zachytavani udalosti
document.onmousedown = mdown;
document.onmouseup=mup;
document.ondblclick=maxOkno;
document.onselectstart=returnFalse;
document.ondragstart=returnFalse;
/// Funkce pro udalosti
function mdown()

{document.onmousemove=mmove;
clix = event.x;cliy = event.y;
document.getElementById(„toolbar“).bgColor=param[1];
return false;}

function mmove()

{x = event.x-clix; y = event.y-cliy;
parent.self.moveBy(x,y);
document.onselectstart=returnFalse;}

function mup()

{document.onmousemove=““;
document.getElementById(„toolbar“).bgColor=param[0];
return false;}

function returnFalse(){ return false; }
/// Konec kodu modulu topBar
/// Soubor: topBar.htm

Logika běhu je následující. Je-li uživatelem kdekoliv na topBaru stisknuto tlačítko na myši (dokumentu), pravděpodobně hodlá změnit pozici okna. Je tedy volána funkce mdown, která změní pozadí dokumentu a zaznamená pozici klinutí do proměnných clix,cliy od nichž se bude vypočítávat relativní posunutí celého okna. Od této chvíle, dokud nebude tlačítko uvolněno, musíme zaznamenávat pohyb myši. Proto přiřadíme události onmousemove funkci mmove. Ta jednoduchým výpočtem zajistí v závislosti na pohybu myši celý přesun okna. Jakmile dojde k uvolnění tlačítka, změní se pozadí na původní barvu a přestane se sledovat pohyb myši. Jelikož obsah topBaru však překrývá obrázek (viz. výše), systém by popisované počínání chápal jako snaha o přesun respektive označení obrázku. Proto je také nutné přiřadit událostem onselectstart a ondragstart funkci vracející hodnotu false. Tímto defacto nařídíme jejich ignoraci.

Vlastnost změny velikosti okna programovat nemusíme. Tu, v případě, že fullscreen okno otevřeme s parametrem resize=1, obstará operační systém. Topbar máme vytvořen, příště se podíváme na zbylé moduly a celou knihovnu dokončíme.

Žádný příspěvek v diskuzi

Odpovědět