#include <calc_dlg_base.h>
Klassendiagramm für CalcDlgBase:

Öffentliche Methoden | |
| CalcDlgBase () | |
| virtual | ~CalcDlgBase () |
| 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. | |
| void | initCalcDlgBase () |
| Initialisierung, die nach "Einschalten" (mButOnP) des Rechners durchgefuehrt wird. | |
| void | clearLcd () |
| Loescht das LCD. | |
| void | resizeAllWidgets (QDialog *mainDlgP) |
| Ermittelt aus der aktuellen Groesse und der Originalgroesse des Hauptdialogs mainDlgP Streckfaktoren in x- und y-Richtung. | |
| void | setLastType (ButtonType bt) |
| void | showHint () |
| Bringt Message-Box auf den Bildschirm, wenn die Maus zum ersten Mal den Rechnerdialog betritt. | |
| string | extractSym (QPushButton *senderP) |
| Extrahiert das Symbol aus dem Button-Namen, indem das fuehrende "m" und abschliessende "P" entfernt wird. | |
| void | butAnyModeBase (string &sym) |
| Funktion, die fuer die Bearbeitung aller Modus-Tasten aufgerufen wird. | |
| void | butActionBase (string &sym, string &lastSymb) |
| Slot-Funktionen fuer die meisten Buttons. | |
| void | butDigitBase (string &sym) |
| Wird von allen Zifferntasten aufgerufen. | |
| 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. | |
| void | butBack () |
| Entfernt das letzte Zeichen aus der Anzeige. | |
| void | butTypeBase (QWidget *dlgP, Qt::WFlags wflags) |
| Fuehrt den Konfigurationsdialog aus. | |
| 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. | |
| void | execKeyEvent (QKeyEvent *evP, QMouseEvent &me) |
| Wandelt Tastatur-Event in Button-Pressed-Event um. | |
| void | updateDisplayAfterDigit (string inputStr="") |
| Erneuert die Members mModes und mSeven der Display-Klasse und das LCD entsprechend. | |
| void | updateDisplay (string inputStr="") |
| Erneuert die Members der Display-Klasse, die drei Edit-Felder des Dialogs und das LCD. | |
| void | copyBaseDisplayFields () |
| Holt die Display-Felder aus der zum Taschenrechner gehoerenden Display-Klasse. | |
| 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. | |
| void | makeWgtMap () |
| Speichert bei der Konstruktion des Taschenrechner-Hauptdialogs die Groessen und Positionen aller Widgets in der Map mOrgWgtMap. | |
| void | setRealisticSkin () |
| Versteckt diverse Felder und stellt die Pixmaps auf dem Hintergrund und auf den Buttons dar. | |
| 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. | |
| void | hideOrShowAllLabels (bool isToHide) |
| Geht alle Widgets durch und versteckt oder zeigt alle Labels. | |
| void | setNewSize (QWidget *qwP) |
| Berechnet fuer das Widget qwP eine neue Position und Groesse abhaengig von der aktuellen Groesse des Hauptdialogs und der Originalgroesse. | |
| void | rescalePixmap (QButton *bP, const QRect &orgWgtRect) |
| Kopiert die Hintergrund-Pixmap in einen Button und setzt Palette mit grauem Rand. | |
| 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. | |
| void | butDigitDigit (string &sym) |
| Die Ziffer ist wirklich eine Ziffer (nicht etwa auf ein anderes Symbol umgemappt). | |
| void | butDigitAction (string &sym) |
| Die urspruengliche Ziffer wurde wegen einer Shift-Operation auf ein anderes Symbol umgemappt. | |
| void | addToolTips () |
| Geht die Short-Cut-Map durch und versieht jeden Button darin mit dem Shortcut als Tooltip. | |
| void | removeToolTips () |
| Geht die Short-Cut-Map durch und loescht alle Tooltips der Buttons. | |
| void | pasteText () |
| Kopiert den Textinhalt des Clipboards zeichenweise ins Display. | |
| 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. | |
Private Attribute | |
| clock_t | mPressedClock |
| Clock, wenn Taste gedrueckt wurde. | |
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.
|
|
|
|
|
|
|
|
|
|
|
Geht die Short-Cut-Map durch und versieht jeden Button darin mit dem Shortcut als Tooltip.
|
|
|
Implementiert in Fx3600pMainDlg, Fx85vMainDlg und Ti30mainDlg. |
|
|
Erneute Implementation in Fx3600pMainDlg. |
|
|
Implementiert in Fx3600pMainDlg, Fx85vMainDlg und Ti30mainDlg. |
|
||||||||||||||||
|
Initialisiert einen Taschenrechner. Laedt die passende Pixmap und die Sounds, Basisinitialisierung.
|
|
||||||||||||
|
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.
|
|
|
Funktion, die fuer die Bearbeitung aller Modus-Tasten aufgerufen wird.
|
|
|
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. Erneute Implementation in Fx85vMainDlg. |
|
|
Die urspruengliche Ziffer wurde wegen einer Shift-Operation auf ein anderes Symbol umgemappt. Dieses neue Symbol wird jetzt stattdessen prozessiert.
|
|
|
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.
|
|
|
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.
|
|
|
Waehrend der Eingabe einer Zahl muss das Vorzeichen gewechselt werden, ohne die Eingabe zu unterbrechen; sonst muss im Calculator die Sign-Routine aufgerufen werden.
|
|
||||||||||||
|
Fuehrt den Konfigurationsdialog aus.
|
|
|
Loescht das LCD. Das Rechteck mLcdRect wird wieder mit dem Original aus der urspruenglichen Pixmap ueberschrieben. |
|
|
Holt die Display-Felder aus der zum Taschenrechner gehoerenden Display-Klasse.
|
|
||||||||||||
|
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.
|
|
|
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.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Geht alle Widgets durch und versteckt oder zeigt alle Labels.
|
|
|
Initialisierung, die nach "Einschalten" (mButOnP) des Rechners durchgefuehrt wird.
|
|
|
|
|
||||||||||||
|
Laedt saemtliche in den Verzeichnissen wav/prs und wav/rls vorhandenen Dateien in Listen von QSound-Objekten.
|
|
|
Implementiert in Fx3600pMainDlg, Fx85vMainDlg und Ti30mainDlg. |
|
|
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. |
|
|
Fuehrt grundlegendes Mapping durch von den Symbolen, die zwar in der Konsolenumgebung verwendet werden, aber nicht in Widget-Namen verwendet werden koennen.
|
|
|
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. |
|
|
Spielt einen der Sounds im Vektor mPrsSounds beim Druecken der Taste.
|
|
|
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. |
|
|
Erneute Implementation in Fx3600pMainDlg. |
|
|
Geht die Short-Cut-Map durch und loescht alle Tooltips der Buttons.
|
|
||||||||||||
|
Kopiert die Hintergrund-Pixmap in einen Button und setzt Palette mit grauem Rand.
|
|
|
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.
|
|
|
Wie RealisticSkin, setzt aber die Beschriftung der Buttons und macht alle Felder sichtbar.
|
|
|
Implementiert in Fx3600pMainDlg, Fx85vMainDlg und Ti30mainDlg. |
|
|
|
|
|
|
|
|
Berechnet fuer das Widget qwP eine neue Position und Groesse abhaengig von der aktuellen Groesse des Hauptdialogs und der Originalgroesse.
|
|
|
Versteckt diverse Felder und stellt die Pixmaps auf dem Hintergrund und auf den Buttons dar.
|
|
||||||||||||||||
|
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.
|
|
|
Entfernt alle Pixmaps und restauriert die Beschriftung der Buttons.
|
|
|
Bringt Message-Box auf den Bildschirm, wenn die Maus zum ersten Mal den Rechnerdialog betritt.
|
|
|
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.
|
|
|
Erneuert die Members mModes und mSeven der Display-Klasse und das LCD entsprechend.
|
|
|
Pixmap mit dem Application-Icon (links oben im Dialog).
|
|
|
Pixmap mit dem Hintergrundbild.
|
|
|
Zeiger auf den Dialog.
|
|
|
Zeiger auf den eigentlichen Rechner.
|
|
|
Default-Hoehe des Rechners (falls keine Pixmap).
|
|
|
Default-Breite des Rechners (falls keine Pixmap).
|
|
|
natuerliche Hoehe einer Ziffer im Display
|
|
|
Pixmap mit allen Ziffern.
|
|
|
natuerliche Breite einer Ziffer im Display
|
|
|
"rohes" Ein-Ausgabefeld der Dialog-Box
|
|
|
Eingabefeld des Taschenrechners.
|
|
|
Rechner ein- oder ausgeschaltet.
|
|
|
konnten Rechner-Pixmaps geladen werden?
|
|
|
konnten Sounds geladen werden?
|
|
|
Typ der vorletzten gedrueckten Taste.
|
|
|
Typ der zuletzt gedrueckten Taste.
|
|
|
schmaler Streifen fuer die LCD-Ziffern
|
|
|
formatiertes Ein-Ausgabefeld der Dialog-Box
|
|
|
maximale Anzahl von Ziffern bei der Eingabe
|
|
|
Modes-Ausgabefeld der Dialog-Box.
|
|
|
Originalgroesse des Rechners.
|
|
|
schmaler Streifen fuer die LCD-Ziffern
|
|
|
Originalgroessen und -texte aller Widgets des Dialogs.
|
|
|
Clock, wenn Taste gedrueckt wurde.
|
|
|
Liste aller Sounds fuer 'Taste druecken'.
|
|
|
Liste aller Sounds fuer 'Taste loslassen'.
|
|
|
Pixmap mit allen Ziffern, skaliert.
|
|
|
Namensfeld.
|
|
|
Liste aller Shortcuts.
|
|
|
Resize-Faktor in x-Richtung.
|
|
|
Resize-Faktor in y-Richtung.
|
1.4.1