pEdit 4.0 fejlesztői
szövegszerkesztő
A PCW-ben megjelent a pEdit fejlesztői szövegszerkesztő egy rövid leírása. Most ennek a programnak a programozói oldalát szeretném egy kicsit megmutatni az érdeklődők számára, pontosabban azt, hogy mi is rejlik a „felszín” alatt.
Még a DOS-os „világban” készítettem egy fejlesztést is támogató szövegszerkesztőt C++-ban, amit a mai napig is használok, de a Windows megjelenése után igen hiányzott egy hasonló szolgáltatást nyújtó Windows-os szövegszerkesztő. Ezért kezdtem el a pEdit fejlesztését, ami az újabb és újabb ötletek után érte el a mostani szolgáltatásainak körét.
A program szövegszerkesztő alapja az mwEdit komponens. Mivel már készítettem szövegszerkesztőt C++-ban és tudom, milyen sok buktató és hibalehetőség rejlik benne, ezért kerestem egy jó komponenst. Az mwEdit egy ingyenes, forrással elérhető komponenskönyvtár. Igen sok mindent tud, megbízhatóan működik, képes kezelni a szintaktikai kiemeléseket is. Az első probléma ezzel kapcsolatban jelentkezett. Az mwEdit-hez külön állományokban adják a különböző nyelvekhez tartozó szintaktikai kiemelést végző forrásokat. Van külön Pascalhoz, C-hez, Clipperhez és még igen sok nyelvhez. Ezek befordítása a programba egyrészt nagyon megnövelte volna a program méretét, valamint lekorlátozta volna a nyelvek körét, de a legnagyobb bajom az volt vele, hogy nem lehetett így szabadon definiálni a nyelvi kulcsokat, márpedig az én célom az volt, hogy minél rugalmasabb programot készítsek! Ezért ezeket a forrásokat kihagytam a programból, és készítettem egy olyan komponenst, ami képes tetszés szerinti nyelvhez elkészített szintaktikai állomány kezelésére. Nem volt egyszerű a dolog, mert a sebesség itt igen fontos szempont, hiszen a felhasználó nem várhat egy lapozásra percekig. A megoldás elég jól sikerült, nincs vele sebességbeli probléma sem, ráadásul a felhasználó szabadon elkészítheti a neki fontos nyelvekhez tartozó szintaktikai kiemelés kulcsait. Az mwEdit-ben ezen kívül kijavítottam néhány hibát és átírtam részeket, hogy úgy működjön, ahogy azt én szeretném! Egyébként mindenkinek ajánlom az mwEdit komponenst, igazán profi. Újabb verziója is van már, de a sok módosítás miatt én már nem tudok áttérni az újra, és a régiből hiányzó részeket én már megírtam.
Az mwEdit-ben azonban nem volt minden megvalósítva, amit szerettem volna látni. Ilyen a Delphi szövegszerkesztőjében fellelhető kódbeillesztő és kódparaméter megjelenítés. Természetesen ezt is meg kellett oldanom, hiszen a cél az volt, hogy minél profibb programot készítsek, ráadásul a Delphiben már megszoktam a szolgáltatást, tehát ilyen kellett a pEdit-be is. A kódbeillesztő arra képes, hogy rövidítés begépelésekor és egy billentyű leütésére tetszőleges szöveget, kódot illeszthessünk be a forrásba. A szöveg bármilyen hosszú lehet, így igen hatékonnyá lehet tenni a munkát. A beilleszteni kívánt kódot egy ablakból is ki tudjuk választani, amennyiben nem jut eszünkbe a rövidítés, vagy nincs kedvünk gondolkodni rajta. Az ilyenkor megjelenő ablak egy ListView, amibe betöltöm a beillesztendő szövegek rövidítéseit, és a megnevezésüket. Ez a ListView mindig a fő formon van, meghívásakor a kurzor pozíciójába mozgatom és megjelenítem, majd a választás után eltüntetem újra. (Visible property!)
A kódparaméter funkció megvalósítása egy kicsit trükkösebb dolog. A szolgáltatás lényege, hogy amikor függvényt írunk, akkor a zárójel kirakása után egy hint ablakban megjelenik a függvényhez tartozó paraméterek listája, vastag betűvel kiemelve az éppen aktuális paramétert. Így programozás közben gyorsabban, hatékonyabban és főleg kevesebb hibával dolgozhatunk. Itt azonban egy újabb probléma jelentkezik. Egyrészt az adott forrásban lévő függvények paramétereit ismerem, vagy legalább is megkereshetem, de minden nyelvhez nem készíthetem el ezt a függvény gyűjteményt. A felhasználó azonban elkészítheti és nekem már csak kezelnem kell ezt az állományt.
A szövegszerkesztő rész így teljes lett, minden olyan szolgáltatás bele lett építve, amire szükség lehet. Nézzük meg, hogyan is lehet kezelni a DOS-os és Windows-os állományokat. Mivel ezek karakterkészlete eltér, ezért jó lenne ezt valahogy érzékelni a fájl betöltésekor. Itt egy igen egyszerű trükköt alkalmaztam. A magyar szövegben rengeteg az „é” és az „á” karakter. Én egyszerűen ezeknek a karaktereknek a kódját keresem a szövegben, és így döntöm el, hogy melyikbe tartozik. Egyszerű, de működik! Természetesen van állítási lehetőség is, sőt át is konvertálhatjuk szövegeinket a másik karakterkészletre.
A programnak az mwEdit-tel már megvolt az alapja, ezután már csak a „körítést” kellett elkészíteni hozzá. Természetesen a programnak több fájlt kellett kezelni tudnia, és mivel én az MDI felületű programokat nem igazán szeretem, ezért PageControl-ra teszem fel a szövegszerkesztő ablakokat. A szövegszerkesztő ablak egy különálló form és ezeket dokkolom bele a PageControl dinamikusan létrehozott lapjaiba. Ezzel nincs korlátozva a betölthető fájlok száma és én pontosan ezt akartam. Igaz, hogy a program csak ezt a fajta megjelenítést tudja, de elvileg igen könnyen lehetne MDI formátumúvá alakítani, hiszen különálló formjaim vannak. (Sok olyan program van, ami így tudja megoldani mind a kétféle megjelenítést.)
Ezután kezdődött a „felhasználó barát” alkalmazás összeállítása. Ma már az összes fejlesztő eszközben a munkáinkat projektben foghatjuk össze és ez nem ok nélkül van így. A fejlesztők egy időben akár több munkán is dolgozhatnak és az igen kellemes, ha ezek alkönyvtárait, állományait nem kell minden váltásnál megkeresni. Ezért a pEdit-ben is projekteket hozhatunk létre, amiben tulajdonképpen a különböző munkáinkat foghatjuk össze. A projekt mindazokat az információkat tartalmazza, amire szükségünk van a gyors munkához.
Általában a fejlesztő egy projekttel hosszabb ideig foglalkozik, ezért mennyivel kellemesebb lenne, ha a fájlokat nem kellene minden indításkor betölteni, hanem a program automatikusan megnyitná a projektben utoljára használt állományokat. Nem bonyolult dolog, de milyen kellemes! Vajon miért csak kevés program nyújtja ezt a szolgáltatást?
Azért az sem hátrány, ha állományainkat könnyen és gyorsan meg tudjuk nyitni. Az OpenDialoggal történő fájlnyitás elég lassú, ezért nálam FileListBox-ból választhatjuk ki a megnyitni kívánt állományt, de a hagyományos megoldás is benne van a programban. (Azért arra is figyeltem, hogy a FileListBox a projekt alkönyvtárára mutasson.)
Ezzel azonban még nem tudna a program sokkal többet, mint egy átlagos szövegszerkesztő, én azonban egy „fejlesztő eszközt” akartam készíteni, tehát itt nem állhattam meg. Az lenne a jó, ha programjainkat a szövegszerkesztő elhagyása nélkül fordíthatnánk le és futtathatnánk is. Ez a szolgáltatás olyan szinten valósult meg a programban, hogy képes ellopni a DOS-os fordítók kimenetét és az eredményt egy ablakban megjeleníteni. Miután mindenki más és más fejlesztői nyelvet használ, ezért lehetőséget biztosítottam a különböző nyelvekhez tartozó help állományok megadására is. Így az F1 leütésére az adott nyelvhez tartozó help jelenik meg az ablakban.
Egy fejlesztőnek igen fontos az is, hogy a forrásban gyorsan tudjon mozogni. Ezért készült egy keresőablak, ami azonban egy kicsit trükkösebb egy sima keresésnél. Amennyiben nem írunk be keresendő szöveget a megfelelő mezőbe, akkor kigyűjti a forrásban lévő összes függvényt. Valójában a „function” és a „procedure” szövegeket keresi és ezeket jeleníti meg. Ezzel azonban egy igen jó eszközhöz jutottunk, mivel igen gyorsan tudunk mozogni a függvények között. Ez a funkció még tovább lett bővítve, így egy billentyű leütésére a kurzor alatt lévő függvényre egyszerűen el tudunk ugrani, majd ugyanilyen egyszerűen visszaugorhatunk a hívás helyére. A hagyományos kereső ablakok a forrásban a keresett szóra állnak, itt viszont egy ListBoxban láthatjuk a keresendő szó összes előfordulását és igen egyszerűen mozoghatunk közöttük.
A segédfunkciók ablaka elég sok helyet foglal el. Munka közben sokszor az a legjobb, ha minél nagyobb a szövegszerkesztő ablaka, ezért a segédablak le is zárható, sőt ebben a verzióban képes el is tűnni, vagyis amikor a kurzort valamelyik segédfunkció felé húzzuk, akkor jelenik csak meg az ablak, majd el is tűnik.
Az a jó egy programban, ha minél inkább saját szájízünkre lehet formálni, hiszen eddig is dolgoztunk valamivel, annak funkcióit, gyorsító billentyűit már megszoktuk, tehát az áttérés egy másik programra mindig problémás. Azt kell ilyenkor eldönteni, hogy az új szolgáltatásokért hajlandóak vagyunk-e egy másféle funkcionalitást megtanulni. Amennyiben a program rugalmas, nem kell igazán kompromisszumot kötnünk, hanem egyszerűen átállítjuk a már megszokott formára az új programot. Ezért lehet a pEdit-et teljesen átformálni, hogy ez az áttérés minél egyszerűbb legyen. Átállíthatjuk a gyorsító billentyűket, a gyorsító gombokat, a felbukkanó popup menüket, saját magunk adhatjuk meg a szintaktikai kiemelések kulcsszavait, ezek színeit, az adott nyelvhez tartozó fordítót, a help állományokat és még sok mindent. (Fejlesztés közben törődjünk a felhasználóval, úgy írjunk programot, hogy rugalmas legyen!)
Programozók számára nem igazán van helyesírás ellenőrző, mert a programban elég nehéz az adott nyelv kulcsszavain túljutni, ráadásul magyar nyelvű meg végképp nincs. Valójában mit is kell ellenőrizni egy programforrásban? Nem a nyelvi kulcsszavakat, hanem csak az idézőjelben lévő szövegeket. A pEdit ilyen helyesírás ellenőrzőt is tartalmaz, ami képes a teljes szöveget, csak az idézőjelben lévő szöveget, vagy a HTML kulcsok elhagyásával a HTML szövegek ellenőrzésére. A Word helyesírás ellenőrzőjét használja a program, így a minőséggel sem lehet probléma! OLE-n keresztül érem el a Word helyesírás ellenőrzőjét, így ez nem is növeli a program méretét.
Lehetőség van a pEdit szolgáltatásainak bővítésére is plugin-ek, (beépülő modulok) segítségével. A plugin-ek valójában dinamikusan betöltődő DLL állományok, aminek meg vannak adva a kommunikációs függvényei. Kis gyakorlattal készíthetünk újabb funkciókat a programhoz.
A hatékonyabb munka érdekében még sok funkció került bele a programba. Minden projekthez tartozik „Teendők listája”, ahová felvehetjük a fejlesztési ötleteinket. A Tipp-tárba függvényeket, tippeket tehetünk bele, és innen bemásolhatjuk a szükséges rutint a forrásunkba. Így nem kell őket keresgélni, hiszen egy helyen vannak.
A program az itt leírtaknál sokkal több mindent tud, a cikkben csak a fejlesztési ötleteket és néhány megvalósítási módot szerettem volna bemutatni. Azt hiszem érdemes kipróbálni a programot. A programban meglévő funkciók egy része igen egyszerűen megoldható, csak a felhasználó fejével kell gondolkodnunk. A legtöbb esetben az a baj, hogy mi magunk nem használjuk programjainkat, így nem találjuk meg azokat a szolgáltatásokat, amivel kellemesebbé tehetnénk azt! Figyeljünk ilyen dolgokra, mert akkor a felhasználók szeretni fogják programjainkat.
A program megtalálható a CD-n (A pBase együtt), a frissítések a weblapomról töltetők le más programokkal együtt: pp.freeweb.hu