Almetare 1.20
Alle meine Taschenrechner - Eine C++-Bibliothek zur Entwicklung von Taschenrechnern
calc_dlg_base.h
gehe zur Dokumentation dieser Datei
1//******************************************************************************
2// Copyright (c) 2002-2004 by Friedemann Seebass, Germany.
3// Dieses Programm ist freie Software. Siehe GNU GPL Notiz in Datei main.cpp.
4// This program is free software. See the GNU GPL notice in file main.cpp.
5// Projekt: Almetare - Alle meine Taschenrechner
6//******************************************************************************
10//******************************************************************************
11// Wann Wer Was
12// ---------- -------- ---------------------------------------------------------
13// 15.11.2003 fse boot(), butTypeBase(): neuer Parameter wflags
14// 11.11.2003 fse neue Member-Variable mApplIconPixmap
15// 08.08.2003 fse neue Funktion pasteText()
16// 29.04.2003 fse neue Member-Variable mMaxDigitNum
17// 30 03 2003 fse neue virtuelle Funktion adjustRealisticSkin()
18// 28.03.2003 fse neue virtuelle Funktion preExtractSym()
19// 12.05.2002 fse erzeugt
20//******************************************************************************
21
22#ifndef CALC_DLG_BASE_H
23#define CALC_DLG_BASE_H
24
25//******************************************************************************
26
27#include <string>
28#include <time.h> // clock_t
29#include <qlabel.h>
30#include <qlineedit.h>
31#include <qrect.h>
32#include <qdialog.h>
33#include <qpixmap.h>
34#include <qbitmap.h>
35#include <qbutton.h>
36#include <qsound.h>
37#include "calculator.h" // enum AngMode
38
39using namespace std;
40
41//******************************************************************************
42
45
46struct WgtData
47{
48 QRect rect;
49 QString text;
50};
51
52//******************************************************************************
53
54typedef map<char, QButton*> ShortCutTabT;
55typedef ShortCutTabT::iterator ShortCutTabIT;
56typedef map<string, WgtData> WgtDataMapT;
57typedef WgtDataMapT::iterator WgtDataMapIT;
58
59//******************************************************************************
60
68
70{
71 clock_t mPressedClock;
72
73 bool loadWavs(string path, vector<QSound*>& qsPvec);
74 void makeWgtMap();
75 void setRealisticSkin();
76 void setSimpleSkin();
77 void setDebugSkin();
78 void hideOrShowAllLabels(bool isToHide);
79 void setNewSize(QWidget* qwP);
80 void rescalePixmap(QButton* bP, const QRect& orgWgtRect);
81 string mapDlgBase(string& sym) const;
82 void butDigitDigit(string& sym);
83 void butDigitAction(string& sym);
84 void addToolTips();
85 void removeToolTips();
86 void pasteText(); // fse, 08.08.03
87 void setResetAlwaysOnTop(bool alwaysOnTop, Qt::WFlags wflags, bool showIt); // fse, 15.11.03
88
89protected:
90 enum ButtonType { B_NO, B_ANY_MODE, B_DIGIT, B_ACTION, B_ON, B_PI, B_EE, B_ENG };
91
92 // "Verwandte":
93 QDialog* mCalcDlgP;
95
96 // Geometrie des Rechners:
103 WgtDataMapT mOrgWgtMap;
104 double mXfact;
105 double mYfact;
106
107 // Grafikobjekte/GUI-Elemente:
112 QRect mLcdRect;
113 QLineEdit* mLcdStrBaseP;
114 QLineEdit* mModesBaseP;
115 QLineEdit* mDisplayBaseP;
117
118 // Sonstiges:
119 ButtonType mLastType;
120 ButtonType mLastButOneType;
121 string mDisplayStr;
122 vector<QSound*> mPrsSounds;
123 vector<QSound*> mRlsSounds;
124 ShortCutTabT mShortCutTab;
125 bool mIsOff;
129
130 // Funktionen:
131 void boot(CalculatorBase* cbP, QDialog* dlgP, Qt::WFlags wflags);
132 void initCalcDlgBase();
133 void clearLcd();
134 void resizeAllWidgets(QDialog* mainDlgP);
135 void setLastType(ButtonType bt) { mLastButOneType = mLastType; mLastType = bt; }
136 void showHint();
137 string extractSym(QPushButton* senderP);
138 void butAnyModeBase(string& sym);
139 void butActionBase(string& sym, string& lastSymb);
140 void butDigitBase (string& sym);
141 void butSignBase();
142 void butBack();
143 void butTypeBase(QWidget* dlgP, Qt::WFlags wflags);
144 void playPressBase();
145 void playReleaseBase();
146 void execKeyEvent(QKeyEvent* evP, QMouseEvent& me);
147 void updateDisplayAfterDigit(string inputStr = "");
148 void updateDisplay(string inputStr = "");
149
151 void setError() { mCalcP->getDisplayP ()->setError(); }
152 bool isError () { return mCalcP->getDisplayP ()->isError (); }
153// bool isInv () { return mCalcP->getComputerP()->getIsInv(); }
154 virtual void preExtractSym(string sym) { sym = sym; }; // fuer Casio fx-3600P
155 virtual void adjustRealisticSkin() {}; // fuer Casio fx-3600P
156 virtual void adjustSimpleSkin() = 0;
157 virtual void adjustDebugSkin() = 0;
158 virtual void makeShortCutTab() = 0;
159 virtual void setDisplayFields(bool isDoPerhapsNot = false) = 0; // Argument
160 // nur fuer TI-30 noetig (Thinking-Sequenz)
161public:
162 CalcDlgBase();
163 virtual ~CalcDlgBase() {}
164 CalculatorBase* getCalcP() const { return mCalcP; }
165 bool getIsPixLoaded() { return mIsPixLoaded; }
166 QPixmap& getApplIconPixmap() { return mApplIconPixmap; }
167 ShortCutTabT* getShortCutTabP() { return &mShortCutTab; }
168};
169
170//******************************************************************************
171
172#endif // !CALC_DLG_BASE_H
173
Basisklassen fuer alle Taschenrechner (Modul base)
In dieser Klasse ist die Basisfunktionalitaet des Taschenrechner-Dialogs aller Taschenrechner impleme...
Definition: calc_dlg_base.h:70
bool mIsSoundLoaded
konnten Sounds geladen werden?
Definition: calc_dlg_base.h:127
QLabel * mSeebassBaseP
Namensfeld.
Definition: calc_dlg_base.h:116
double mYfact
Resize-Faktor in y-Richtung.
Definition: calc_dlg_base.h:105
QSize mOrgDlgSize
Originalgroesse des Rechners.
Definition: calc_dlg_base.h:102
void clearLcd()
Loescht das LCD.
Definition: calc_dlg_base.cpp:410
void updateDisplay(string inputStr="")
Erneuert die Members der Display-Klasse, die drei Edit-Felder des Dialogs und das LCD.
Definition: calc_dlg_base.cpp:849
void resizeAllWidgets(QDialog *mainDlgP)
Ermittelt aus der aktuellen Groesse und der Originalgroesse des Hauptdialogs mainDlgP Streckfaktoren ...
Definition: calc_dlg_base.cpp:458
clock_t mPressedClock
Clock, wenn Taste gedrueckt wurde.
Definition: calc_dlg_base.h:71
ButtonType mLastButOneType
Typ der vorletzten gedrueckten Taste.
Definition: calc_dlg_base.h:120
void butBack()
Entfernt das letzte Zeichen aus der Anzeige.
Definition: calc_dlg_base.cpp:929
void setSimpleSkin()
Entfernt alle Pixmaps und restauriert die Beschriftung der Buttons.
Definition: calc_dlg_base.cpp:256
void pasteText()
Kopiert den Textinhalt des Clipboards zeichenweise ins Display.
Definition: calc_dlg_base.cpp:1176
ShortCutTabT mShortCutTab
Liste aller Shortcuts.
Definition: calc_dlg_base.h:124
vector< QSound * > mPrsSounds
Liste aller Sounds fuer 'Taste druecken'.
Definition: calc_dlg_base.h:122
void hideOrShowAllLabels(bool isToHide)
Geht alle Widgets durch und versteckt oder zeigt alle Labels.
Definition: calc_dlg_base.cpp:230
QRect mOrgLcdRect
schmaler Streifen fuer die LCD-Ziffern
Definition: calc_dlg_base.h:101
string extractSym(QPushButton *senderP)
Extrahiert das Symbol aus dem Button-Namen, indem das fuehrende "m" und abschliessende "P" entfernt w...
Definition: calc_dlg_base.cpp:583
QLineEdit * mDisplayBaseP
"rohes" Ein-Ausgabefeld der Dialog-Box
Definition: calc_dlg_base.h:115
void butActionBase(string &sym, string &lastSymb)
Slot-Funktionen fuer die meisten Buttons.
Definition: calc_dlg_base.cpp:648
void butAnyModeBase(string &sym)
Funktion, die fuer die Bearbeitung aller Modus-Tasten aufgerufen wird.
Definition: calc_dlg_base.cpp:671
void playReleaseBase()
Spielt einen der Sounds im Vektor mRlsSounds beim Loslassen der Taste.
Definition: calc_dlg_base.cpp:1048
void initCalcDlgBase()
Initialisierung, die nach "Einschalten" (mButOnP) des Rechners durchgefuehrt wird.
Definition: calc_dlg_base.cpp:395
void rescalePixmap(QButton *bP, const QRect &orgWgtRect)
Kopiert die Hintergrund-Pixmap in einen Button und setzt Palette mit grauem Rand.
Definition: calc_dlg_base.cpp:556
void addToolTips()
Geht die Short-Cut-Map durch und versieht jeden Button darin mit dem Shortcut als Tooltip.
Definition: calc_dlg_base.cpp:310
bool mIsPixLoaded
konnten Rechner-Pixmaps geladen werden?
Definition: calc_dlg_base.h:126
void butTypeBase(QWidget *dlgP, Qt::WFlags wflags)
Fuehrt den Konfigurationsdialog aus.
Definition: calc_dlg_base.cpp:978
QDialog * mCalcDlgP
Zeiger auf den Dialog.
Definition: calc_dlg_base.h:93
void execKeyEvent(QKeyEvent *evP, QMouseEvent &me)
Wandelt Tastatur-Event in Button-Pressed-Event um.
Definition: calc_dlg_base.cpp:1076
bool loadWavs(string path, vector< QSound * > &qsPvec)
Laedt saemtliche in den Verzeichnissen wav/prs und wav/rls vorhandenen Dateien in Listen von QSound-O...
Definition: calc_dlg_base.cpp:138
int mDigitHeight
natuerliche Hoehe einer Ziffer im Display
Definition: calc_dlg_base.h:100
CalculatorBase * mCalcP
Zeiger auf den eigentlichen Rechner.
Definition: calc_dlg_base.h:94
string mDisplayStr
Eingabefeld des Taschenrechners.
Definition: calc_dlg_base.h:121
QPixmap mApplIconPixmap
Pixmap mit dem Application-Icon (links oben im Dialog)
Definition: calc_dlg_base.h:108
void makeWgtMap()
Speichert bei der Konstruktion des Taschenrechner-Hauptdialogs die Groessen und Positionen aller Widg...
Definition: calc_dlg_base.cpp:166
void setNewSize(QWidget *qwP)
Berechnet fuer das Widget qwP eine neue Position und Groesse abhaengig von der aktuellen Groesse des ...
Definition: calc_dlg_base.cpp:501
void updateDisplayAfterDigit(string inputStr="")
Erneuert die Members mModes und mSeven der Display-Klasse und das LCD entsprechend.
Definition: calc_dlg_base.cpp:799
QLineEdit * mModesBaseP
Modes-Ausgabefeld der Dialog-Box.
Definition: calc_dlg_base.h:114
int mDigitWidth
natuerliche Breite einer Ziffer im Display
Definition: calc_dlg_base.h:99
void showHint()
Bringt Message-Box auf den Bildschirm, wenn die Maus zum ersten Mal den Rechnerdialog betritt.
Definition: calc_dlg_base.cpp:433
QLineEdit * mLcdStrBaseP
formatiertes Ein-Ausgabefeld der Dialog-Box
Definition: calc_dlg_base.h:113
WgtDataMapT mOrgWgtMap
Originalgroessen und -texte aller Widgets des Dialogs.
Definition: calc_dlg_base.h:103
void boot(CalculatorBase *cbP, QDialog *dlgP, Qt::WFlags wflags)
Initialisiert einen Taschenrechner.
Definition: calc_dlg_base.cpp:75
void copyBaseDisplayFields()
Holt die Display-Felder aus der zum Taschenrechner gehoerenden Display-Klasse.
Definition: calc_dlg_base.cpp:627
vector< QSound * > mRlsSounds
Liste aller Sounds fuer 'Taste loslassen'.
Definition: calc_dlg_base.h:123
void butSignBase()
Waehrend der Eingabe einer Zahl muss das Vorzeichen gewechselt werden, ohne die Eingabe zu unterbrech...
Definition: calc_dlg_base.cpp:878
void butDigitBase(string &sym)
Wird von allen Zifferntasten aufgerufen.
Definition: calc_dlg_base.cpp:694
QPixmap mDigitsPixmap
Pixmap mit allen Ziffern.
Definition: calc_dlg_base.h:110
int mMaxDigitNum
maximale Anzahl von Ziffern bei der Eingabe
Definition: calc_dlg_base.h:128
QRect mLcdRect
schmaler Streifen fuer die LCD-Ziffern
Definition: calc_dlg_base.h:112
void setResetAlwaysOnTop(bool alwaysOnTop, Qt::WFlags wflags, bool showIt)
Setzt das Dialog-Flag Qt::WStyle_StaysOnTop des Rechnerdialogs, wenn alwaysOnTop true; andernfalls wi...
Definition: calc_dlg_base.cpp:340
void setRealisticSkin()
Versteckt diverse Felder und stellt die Pixmaps auf dem Hintergrund und auf den Buttons dar.
Definition: calc_dlg_base.cpp:213
double mXfact
Resize-Faktor in x-Richtung.
Definition: calc_dlg_base.h:104
void butDigitAction(string &sym)
Die urspruengliche Ziffer wurde wegen einer Shift-Operation auf ein anderes Symbol umgemappt.
Definition: calc_dlg_base.cpp:764
void butDigitDigit(string &sym)
Die Ziffer ist wirklich eine Ziffer (nicht etwa auf ein anderes Symbol umgemappt).
Definition: calc_dlg_base.cpp:724
int mDefaultWidth
Default-Breite des Rechners (falls keine Pixmap)
Definition: calc_dlg_base.h:97
void removeToolTips()
Geht die Short-Cut-Map durch und loescht alle Tooltips der Buttons.
Definition: calc_dlg_base.cpp:376
bool mIsOff
Rechner ein- oder ausgeschaltet.
Definition: calc_dlg_base.h:125
string mapDlgBase(string &sym) const
Fuehrt grundlegendes Mapping durch von den Symbolen, die zwar in der Konsolenumgebung verwendet werde...
Definition: calc_dlg_base.cpp:604
QPixmap mBackgroundPixmap
Pixmap mit dem Hintergrundbild.
Definition: calc_dlg_base.h:109
void setDebugSkin()
Wie RealisticSkin, setzt aber die Beschriftung der Buttons und macht alle Felder sichtbar.
Definition: calc_dlg_base.cpp:296
void playPressBase()
Spielt einen der Sounds im Vektor mPrsSounds beim Druecken der Taste.
Definition: calc_dlg_base.cpp:1025
QPixmap mScaledDigitsPixmap
Pixmap mit allen Ziffern, skaliert.
Definition: calc_dlg_base.h:111
ButtonType mLastType
Typ der zuletzt gedrueckten Taste.
Definition: calc_dlg_base.h:119
int mDefaultHeight
Default-Hoehe des Rechners (falls keine Pixmap)
Definition: calc_dlg_base.h:98
Basisklasse aller Taschenrechner.
Definition: calculator.h:245
bool isError()
Prueft, ob bei einer Berechnung ein Fehler aufgetreten ist.
Definition: calculator.cpp:176
Struktur zur Aufnahme der Groesse und des Originaltextes aller Widgets auf dem Dialog.
Definition: calc_dlg_base.h:47