Almetare
1.15
Alle meine Taschenrechner - Eine C++-Bibliothek zur Entwicklung von Taschenrechnern
|
In dieser Klasse ist die Basisfunktionalitaet des Taschenrechner-Dialogs aller Taschenrechner implementiert. Mehr ...
#include <calc_dlg_base.h>
Öffentliche Methoden | |
CalculatorBase * | getCalcP () const |
bool | getIsPixLoaded () |
QPixmap & | getApplIconPixmap () |
ShortCutTabT * | getShortCutTabP () |
Geschützte Typen | |
enum | ButtonType { B_NO, B_ANY_MODE, B_DIGIT, B_ACTION, B_ON, B_PI, B_EE, B_ENG } |
Geschützte Methoden | |
void | boot (CalculatorBase *cbP, QDialog *dlgP, Qt::WFlags wflags) |
Initialisiert einen Taschenrechner. Mehr ... | |
void | initCalcDlgBase () |
Initialisierung, die nach "Einschalten" (mButOnP) des Rechners durchgefuehrt wird. Mehr ... | |
void | clearLcd () |
Loescht das LCD. Mehr ... | |
void | resizeAllWidgets (QDialog *mainDlgP) |
Ermittelt aus der aktuellen Groesse und der Originalgroesse des Hauptdialogs mainDlgP Streckfaktoren in x- und y-Richtung. Mehr ... | |
void | setLastType (ButtonType bt) |
void | showHint () |
Bringt Message-Box auf den Bildschirm, wenn die Maus zum ersten Mal den Rechnerdialog betritt. Mehr ... | |
string | extractSym (QPushButton *senderP) |
Extrahiert das Symbol aus dem Button-Namen, indem das fuehrende "m" und abschliessende "P" entfernt wird. Mehr ... | |
void | butAnyModeBase (string &sym) |
Funktion, die fuer die Bearbeitung aller Modus-Tasten aufgerufen wird. Mehr ... | |
void | butActionBase (string &sym, string &lastSymb) |
Slot-Funktionen fuer die meisten Buttons. Mehr ... | |
void | butDigitBase (string &sym) |
Wird von allen Zifferntasten aufgerufen. Mehr ... | |
void | butSignBase () |
Waehrend der Eingabe einer Zahl muss das Vorzeichen gewechselt werden, ohne die Eingabe zu unterbrechen; sonst muss im Calculator die Sign-Routine aufgerufen werden. Mehr ... | |
void | butBack () |
Entfernt das letzte Zeichen aus der Anzeige. Mehr ... | |
void | butTypeBase (QWidget *dlgP, Qt::WFlags wflags) |
Fuehrt den Konfigurationsdialog aus. Mehr ... | |
void | playPressBase () |
Spielt einen der Sounds im Vektor mPrsSounds beim Druecken der Taste. | |
void | playReleaseBase () |
Spielt einen der Sounds im Vektor mRlsSounds beim Loslassen der Taste. Mehr ... | |
void | execKeyEvent (QKeyEvent *evP, QMouseEvent &me) |
Wandelt Tastatur-Event in Button-Pressed-Event um. Mehr ... | |
void | updateDisplayAfterDigit (string inputStr="") |
Erneuert die Members mModes und mSeven der Display-Klasse und das LCD entsprechend. Mehr ... | |
void | updateDisplay (string inputStr="") |
Erneuert die Members der Display-Klasse, die drei Edit-Felder des Dialogs und das LCD. Mehr ... | |
void | copyBaseDisplayFields () |
Holt die Display-Felder aus der zum Taschenrechner gehoerenden Display-Klasse. Mehr ... | |
void | setError () |
bool | isError () |
virtual void | preExtractSym (string sym) |
virtual void | adjustRealisticSkin () |
virtual void | adjustSimpleSkin ()=0 |
virtual void | adjustDebugSkin ()=0 |
virtual void | makeShortCutTab ()=0 |
virtual void | setDisplayFields (bool isDoPerhapsNot=false)=0 |
Geschützte Attribute | |
QDialog * | mCalcDlgP |
Zeiger auf den Dialog. | |
CalculatorBase * | mCalcP |
Zeiger auf den eigentlichen Rechner. | |
int | mDefaultWidth |
Default-Breite des Rechners (falls keine Pixmap) | |
int | mDefaultHeight |
Default-Hoehe des Rechners (falls keine Pixmap) | |
int | mDigitWidth |
natuerliche Breite einer Ziffer im Display | |
int | mDigitHeight |
natuerliche Hoehe einer Ziffer im Display | |
QRect | mOrgLcdRect |
schmaler Streifen fuer die LCD-Ziffern | |
QSize | mOrgDlgSize |
Originalgroesse des Rechners. | |
WgtDataMapT | mOrgWgtMap |
Originalgroessen und -texte aller Widgets des Dialogs. | |
double | mXfact |
Resize-Faktor in x-Richtung. | |
double | mYfact |
Resize-Faktor in y-Richtung. | |
QPixmap | mApplIconPixmap |
Pixmap mit dem Application-Icon (links oben im Dialog) | |
QPixmap | mBackgroundPixmap |
Pixmap mit dem Hintergrundbild. | |
QPixmap | mDigitsPixmap |
Pixmap mit allen Ziffern. | |
QPixmap | mScaledDigitsPixmap |
Pixmap mit allen Ziffern, skaliert. | |
QRect | mLcdRect |
schmaler Streifen fuer die LCD-Ziffern | |
QLineEdit * | mLcdStrBaseP |
formatiertes Ein-Ausgabefeld der Dialog-Box | |
QLineEdit * | mModesBaseP |
Modes-Ausgabefeld der Dialog-Box. | |
QLineEdit * | mDisplayBaseP |
"rohes" Ein-Ausgabefeld der Dialog-Box | |
QLabel * | mSeebassBaseP |
Namensfeld. | |
ButtonType | mLastType |
Typ der zuletzt gedrueckten Taste. | |
ButtonType | mLastButOneType |
Typ der vorletzten gedrueckten Taste. | |
string | mDisplayStr |
Eingabefeld des Taschenrechners. | |
vector< QSound * > | mPrsSounds |
Liste aller Sounds fuer 'Taste druecken'. | |
vector< QSound * > | mRlsSounds |
Liste aller Sounds fuer 'Taste loslassen'. | |
ShortCutTabT | mShortCutTab |
Liste aller Shortcuts. | |
bool | mIsOff |
Rechner ein- oder ausgeschaltet. | |
bool | mIsPixLoaded |
konnten Rechner-Pixmaps geladen werden? | |
bool | mIsSoundLoaded |
konnten Sounds geladen werden? | |
int | mMaxDigitNum |
maximale Anzahl von Ziffern bei der Eingabe | |
Private Methoden | |
bool | loadWavs (string path, vector< QSound * > &qsPvec) |
Laedt saemtliche in den Verzeichnissen wav/prs und wav/rls vorhandenen Dateien in Listen von QSound-Objekten. Mehr ... | |
void | makeWgtMap () |
Speichert bei der Konstruktion des Taschenrechner-Hauptdialogs die Groessen und Positionen aller Widgets in der Map mOrgWgtMap. Mehr ... | |
void | setRealisticSkin () |
Versteckt diverse Felder und stellt die Pixmaps auf dem Hintergrund und auf den Buttons dar. Mehr ... | |
void | setSimpleSkin () |
Entfernt alle Pixmaps und restauriert die Beschriftung der Buttons. | |
void | setDebugSkin () |
Wie RealisticSkin, setzt aber die Beschriftung der Buttons und macht alle Felder sichtbar. Mehr ... | |
void | hideOrShowAllLabels (bool isToHide) |
Geht alle Widgets durch und versteckt oder zeigt alle Labels. Mehr ... | |
void | setNewSize (QWidget *qwP) |
Berechnet fuer das Widget qwP eine neue Position und Groesse abhaengig von der aktuellen Groesse des Hauptdialogs und der Originalgroesse. Mehr ... | |
void | rescalePixmap (QButton *bP, const QRect &orgWgtRect) |
Kopiert die Hintergrund-Pixmap in einen Button und setzt Palette mit grauem Rand. Mehr ... | |
string | mapDlgBase (string &sym) const |
Fuehrt grundlegendes Mapping durch von den Symbolen, die zwar in der Konsolenumgebung verwendet werden, aber nicht in Widget-Namen verwendet werden koennen. Mehr ... | |
void | butDigitDigit (string &sym) |
Die Ziffer ist wirklich eine Ziffer (nicht etwa auf ein anderes Symbol umgemappt). Mehr ... | |
void | butDigitAction (string &sym) |
Die urspruengliche Ziffer wurde wegen einer Shift-Operation auf ein anderes Symbol umgemappt. Mehr ... | |
void | addToolTips () |
Geht die Short-Cut-Map durch und versieht jeden Button darin mit dem Shortcut als Tooltip. Mehr ... | |
void | removeToolTips () |
Geht die Short-Cut-Map durch und loescht alle Tooltips der Buttons. | |
void | pasteText () |
Kopiert den Textinhalt des Clipboards zeichenweise ins Display. Mehr ... | |
void | setResetAlwaysOnTop (bool alwaysOnTop, Qt::WFlags wflags, bool showIt) |
Setzt das Dialog-Flag Qt::WStyle_StaysOnTop des Rechnerdialogs, wenn alwaysOnTop true; andernfalls wird es zurueckgesetzt. Mehr ... | |
Private Attribute | |
clock_t | mPressedClock |
Clock, wenn Taste gedrueckt wurde. | |
In dieser Klasse ist die Basisfunktionalitaet des Taschenrechner-Dialogs aller Taschenrechner implementiert.
Der eigentliche Taschenrechner-Dialog (z.B. Fx85vMainDlg) wird einerseits von der Klasse abgeleitet, die vom Qt-Designer erzeugt wird, und andererseits von dieser Klasse. Beispielsweise ist hier das Laden des Hintergrundbildes, Vergroessern und Verkleinern der Dialogbox usw. implementiert; kurz: alles, was allen Taschenrechnerdialogen gemeinsam ist.
|
private |
Geht die Short-Cut-Map durch und versieht jeden Button darin mit dem Shortcut als Tooltip.
|
protected |
Initialisiert einen Taschenrechner.
Laedt die passende Pixmap und die Sounds, Basisinitialisierung.
cbP | Zeiger auf die Calculator-Basisklasse des Rechners |
dlgP | Zeiger auf die Qt-Dialogbox |
wflags | diverse Qt-Dialog-Flags |
|
protected |
Slot-Funktionen fuer die meisten Buttons.
Der Name des gedrueckten Buttons wird ermittelt; bis auf das "m" und "P" (z.B. im Namen "mSignP") ist der Name i.d.R. identisch mit dem String, den der Calculator in seiner Funktion process() erwartet. Dieser String wird daher an ihn geschickt. Wenn als letztes eine Zahl (sie befindet sich in mDisplayStr) eingegeben wurde, muss zunaechst diese der process()-Funktion uebergeben werden.
sym | zu verarbeitendes Symbol |
lastSymb | das Symbol, das beim letzten Aufruf uebergeben worden war |
|
protected |
Funktion, die fuer die Bearbeitung aller Modus-Tasten aufgerufen wird.
sym | das Symbol mit dem Modus ("inv" etc.) |
|
protected |
Entfernt das letzte Zeichen aus der Anzeige.
Wenn die Anzeige in Exponentialdarstellung ist, werden die Ziffern des Exponenten nach rechts geshifted bis er nur noch Nullen enthaelt, dann wird er ganz entfernt.
|
private |
|
protected |
Wird von allen Zifferntasten aufgerufen.
Entweder ist in sym tatsaechlich eine Ziffer, dann wird sie i.d.R. an die Anzeige angehaengt. Oder in sym ist keine Ziffer (die Ziffer wurde wegen Shift oder Mode umgemappt), dann muss die entsprechende Aktion ausgefuehrt werden.
sym | das Symbol mit der Ziffer |
|
private |
Die Ziffer ist wirklich eine Ziffer (nicht etwa auf ein anderes Symbol umgemappt).
Die Ziffer ersetzt daher die Anzeige komplett oder wird an die Anzeige angehaengt. Wenn die Zahl gerade in Exponentialschreibweise dargestellt wird, darf die Zahl nicht einfach angehaengt werden, sondern die letzten beiden Ziffern des Exponenten werden nach links geshifted.
sym | das Symbol mit der Ziffer |
|
protected |
Waehrend der Eingabe einer Zahl muss das Vorzeichen gewechselt werden, ohne die Eingabe zu unterbrechen; sonst muss im Calculator die Sign-Routine aufgerufen werden.
|
protected |
Fuehrt den Konfigurationsdialog aus.
dlgP | Zeiger auf den Vater-Dialog |
wflags | die Flag-Parameter des Rechnerdialogs |
|
protected |
Loescht das LCD.
Das Rechteck mLcdRect wird wieder mit dem Original aus der urspruenglichen Pixmap ueberschrieben.
|
protected |
Holt die Display-Felder aus der zum Taschenrechner gehoerenden Display-Klasse.
|
protected |
Wandelt Tastatur-Event in Button-Pressed-Event um.
Dazu wird die Liste der Shortcuts durchgesehen und das Event an den dort zur Taste vermerkten Button geschickt.
evP | Tastatur-Event |
me | entsprechendes Maus-Event |
|
protected |
Extrahiert das Symbol aus dem Button-Namen, indem das fuehrende "m" und abschliessende "P" entfernt wird.
Ausserdem wird das Symbol gleich auf ein anderes gemapped, wenn eine Shift- Ebene aktiv ist.
senderP | Zeiger auf den Button, der gedrueckt wurde |
|
private |
Geht alle Widgets durch und versteckt oder zeigt alle Labels.
isToHide | wenn true, werden die Labels versteckt, sonst gezeigt |
|
protected |
Initialisierung, die nach "Einschalten" (mButOnP) des Rechners durchgefuehrt wird.
|
private |
Laedt saemtliche in den Verzeichnissen wav/prs und wav/rls vorhandenen Dateien in Listen von QSound-Objekten.
path | Pfad zum Verzeichnis mit den Wav-Dateien |
qsPvec | Vektor mit den Zeigern auf die QSound-Objekte |
|
private |
Speichert bei der Konstruktion des Taschenrechner-Hauptdialogs die Groessen und Positionen aller Widgets in der Map mOrgWgtMap.
Die Daten werden spaeter zur Skalierung gebraucht. Falls das Widget ein Button ist, werden auch die Texte gespeichert, da diese durch Setzen einer Pixmap geloescht werden.
|
private |
|
private |
Kopiert den Textinhalt des Clipboards zeichenweise ins Display.
Dabei wird fuer jedes Zeichen ein Tastendruck simuliert, das Zeichen also als Shortcut gemaess der Tabelle mShortCutTab[] interpretiert. Auf diese Weise ist also ebenfalls eine Art Programmierung des Rechners moeglich. Allerdings sollen normalerweise mit dieser Funktion Zahlen und keine "Programme" in die Anzeige gebracht werden, und diese sehen z.B so aus: -2.3e-025. mShortCutTab[] interpretiert nun aber "-" nicht als Vorzeichen, sondern als Subtraktion; auch ist die Reihenfolge der Zeichen falsch, wenn in die Anzeige diese Zahl eingegeben wird. Die waere naemlich so: "2.3_e025_". Also muss der String entsprechend umgestellt werden. Um trotzdem auch die "Programmierung" zu erlauben, wird nun zunaechst geprueft, ob im Clipboard eine einzelne Zahl steht. Ist dies der Fall, wird eine entsprechende Umstellung der Zeichen vorgenommen. Ist dies nicht der Fall, werden alle Zeichen so prozessiert, wie sie im Clipboard stehen.
|
protected |
Spielt einen der Sounds im Vektor mRlsSounds beim Loslassen der Taste.
Der Sound darf nur dann gespielt werden, wenn der vom Druecken der Taste schon abgespielt ist, da man sonst nur das Loslassen hoert. Nach 0.15 Sek. sollte der Druecken-Sound vorbei sein.
|
private |
Kopiert die Hintergrund-Pixmap in einen Button und setzt Palette mit grauem Rand.
bP | Zeiger auf den zu bearbeitenden Button |
orgWgtRect | Groesse des originalen, unskalierten Buttons |
|
protected |
Ermittelt aus der aktuellen Groesse und der Originalgroesse des Hauptdialogs mainDlgP Streckfaktoren in x- und y-Richtung.
Mit diesen werden alle Widgets des Dialogs bzgl. Position und Groesse angepasst.
mainDlgP | Zeiger auf die Rechner-Dialogbox |
|
private |
Wie RealisticSkin, setzt aber die Beschriftung der Buttons und macht alle Felder sichtbar.
|
private |
Berechnet fuer das Widget qwP eine neue Position und Groesse abhaengig von der aktuellen Groesse des Hauptdialogs und der Originalgroesse.
qwP | Zeiger auf das Widget, dessen Groesse berechnet werden soll |
|
private |
Versteckt diverse Felder und stellt die Pixmaps auf dem Hintergrund und auf den Buttons dar.
|
private |
Setzt das Dialog-Flag Qt::WStyle_StaysOnTop des Rechnerdialogs, wenn alwaysOnTop true; andernfalls wird es zurueckgesetzt.
Das Setzen erfolgt mit reparent(). Die Qt-Funktion setWFlags() ist protected und kann daher hier nicht ueber den Zeiger mCalcDlgP aufgerufen werden. Ausserdem scheint die Funktion nicht zu funktionieren.
alwaysOnTop | wenn true, wird Flag gesetzt, sonst wird's zurueckgesetzt |
wflags | Flags zur Gestaltung der Dialog-Titelzeilenelemente |
showIt | fuer reparent(): Dialog neu zeichnen |
|
protected |
Bringt Message-Box auf den Bildschirm, wenn die Maus zum ersten Mal den Rechnerdialog betritt.
|
protected |
Erneuert die Members der Display-Klasse, die drei Edit-Felder des Dialogs und das LCD.
Wenn inputStr leer ist, werden die Members der Display-Klasse allenfalls umformatiert, der Wert der Anzeige wird nicht geaendert. Sinn: Z.B. der Button "abc" muss eine Umformatierung durchfuehren, ohne Werte zu aendern. Wenn inputStr gefuellt ist, wird dieser String als mSeven in die Display-Klasse und als Eingabestring in das Dialog-Edit-Feld *mDisplayP uebertragen, mValue und mModes aber ebenfalls nicht geaendert. Sinn: Bei der Eingabe von Ziffern muessen diese sofort angezeigt werden, ohne dass sich der Wert mVal in der Display-Klasse gleich aendern darf, da die Eingabe ja noch nicht abgeschlossen ist.
inputStr | wenn "", wird der String in mDisplayStr verwendet, um die Anzeige zu erstellen, sonst inputStr |
|
protected |
Erneuert die Members mModes und mSeven der Display-Klasse und das LCD entsprechend.
inputStr | wenn "", wird der String in mDisplayStr verwendet, um die Anzeige zu erstellen, sonst inputStr |