Kalendarium-Plugin
Das Plugin enthält einige Klassen:
Calendardate - Eine Klasse für die einzelnen Tage eines Monats Layer - Eine Klasse für die Bilddaten in Gimp GimpImage - Eine Klasse um ein Bild in Gimp zu erzeugen und anzuzeigen Gimpcalendar - Die Schnittstelle nach aussen, erbt von GimpImage, ein Objekt wird vom Plugin erzeugt
Die folgenden Klassen bauen auf der Klasse Layer auf:
GimpcalendarDayabbr - die Abkürzung des Wochentags für jeden Tag GimpcalendarWeek - die Kalenderwoche
GimpcalendarDay - erbt von Layer und Calendardate, ein Objekt nimmt alle nötigen Tagen eines Tags auf.
Gimpcalendar
Vom Plugin wird ein Objekt dieser Klasse erzeugt. Es erhält die Parameter aus dem Gimp-Dialog.
Zunächst erzeugt es ein neues Bild da es von der Klasse GimpImage abgeleitet ist.
Aus einer Liste die calendar.monthcalendar() erzeugt wird die Liste monat mit je einer Liste für eine Kalenderwoche gefüllt.
Jede Woche besteht aus einem Objekt GimpcalendarWeek und einer Liste. Die Liste enthält für jeden Tag ein Objekt von GimpcalendarDay und GimpcalendarDayabbr.
Bei der Initialisierung der einzelnen Objekte wir immer die Ausdehnung des Layers ermittelt. Der maximale Wert über alle Objekte wird für die spätere Positionierung gespeichert.
Nachdem das Objekt Gimpcalendar erzeugt ist kann mit einer der Methoden horizontal, vertikal oder rect die Ausrichtung des Kalendariums festgelegt werden. Die Methode display zeigt das Bild an.
class Gimpcalendar(GimpImage): def __init__(self, month, year, font, fontsize, fontcolor, sundaycolor, kwfont, kwfontsize, kwcolor): GimpImage.__init__(self) self.month = month self.year = year self.font = font self.fontsize = fontsize self.fontcolor = fontcolor self.sundaycolor = sundaycolor self.kwfont = kwfont self.kwfontsize = kwfontsize self.kwcolor = kwcolor self.monat = [] self.headline = [] for week in calendar.monthcalendar(self.year, self.month): weekdays = [] for day in week: if day == 0: # 0 ist kein gueltiger Tag continue caldate = GimpcalendarDay(day, self.month, self.year, self.image, self.font, self.fontsize, self.fontcolor, self.sundaycolor ) datename = GimpcalendarDayabbr(self.image, caldate.getweekdayabbr(), self.font, self.fontsize, caldate.getweekdaycolor() ) datew, dateh = datename.getmax() caldate.setmax(datew, dateh) weekdays.append((caldate, datename)) self.monat.append((GimpcalendarWeek(self.image, weekdays[0][0].getcalweek(), self.kwfont, self.kwfontsize, self.kwcolor), weekdays)) def horizontal(self): """ Alle erzeugten Layer von links nach rechts ausgeben: Die X-Position fuer das naechste Layer ergibt sich aus der Addition der Breite der bisher verschobenen Layers. """ xoffset = 0 yoffset = 0 for kalenderwoche, days in self.monat: w, h = kalenderwoche.movelayer(xoffset, 0) xoffset += w for day, dayname in days: w, h = day.movelayer(xoffset, 0) w, h = dayname.movelayer(xoffset, -GimpcalendarDayabbr.maxh) xoffset += w def vertikal(self): """ Wochentag und Datum von links nach rechts ausgeben, dann in die "naechste Zeile". """ xoffset = 0 yoffset = 0 for kalenderwoche, days in self.monat: w, h = kalenderwoche.movelayer(0, yoffset) for day, dayname in days: w, h = day.movelayer(kalenderwoche.maxw + GimpcalendarDay.maxw, yoffset) w, h = dayname.movelayer(kalenderwoche.maxw, yoffset) yoffset += h def rect(self): """ Kalenderwoche, die Wochentage und Daten von links nach rechts ausgeben. Dann erfolgt der Sprung in die "naechste Zeile". Die Wochentage werden alle mit der gleichen Y-Position uebereinander geschrieben. """ yoffset = 0 for kalenderwoche, days in self.monat: xoffset = 0 w, h = kalenderwoche.movelayer(0, yoffset) xoffset += w for day, dayname in days: w, h = day.movelayer(xoffset + day.getweekday() * GimpcalendarDay.maxw, yoffset) w, h = dayname.movelayer(xoffset + day.getweekday() * GimpcalendarDay.maxw, -GimpcalendarDay.maxh) yoffset += h
Plugin register
Die Schnittstelle zum Registrieren des Plugins verlangt eine Menge Parameter. Besonders interessant ist der Pfad unter dem das Script nach dem Start von Gimp im Menu zu finden ist und die Bildtypen auf die das Script arbeitet.
Der Pfad
ist der Parameter Nummer sechs. <Toolbox>/File/Create/Monatskalender... lässt den Eintrag Monatskalender... unter File - Create erscheinen.
<Image>/FX-Foundry/Toolbox/HVR-Kalender plaziert den Eintrag unter FX-Foundry - Toolbox. Dieser Pfad funktioniert natürlich nur wenn die FX-Foundry-Scripts installiert sind.
Am Besten lassen sich die Möglichkeiten für den ersten Teil des Pfades ermitteln wenn man hier einen Tippfehler einbaut und Gimp dann in der Konsole startet. Die Fehlermeldung zeigt dann die zulässigen Werte.
Die Bildtypen
folgen nach der Pfadangabe für das Script. Normalerweise würde man dort alle möglichen Bildtypen eintragen: "RGB*, GRAY*"
Dieser Eintrag führt aber dazu, dass das Script erst aufgerufen werden kann wenn ein Bild geöffnet ist.
Wenn der Eintrag für den Bildtyp ein Leerstring ist, steht das Script auch ohne ein Bild zur Verfügung.
Mit dem Leerstring muss auch die Parameterzahl der Funktion register angepasst werden: Es sind jetzt zwei weniger!