1*0a9064fbSMasahiro Yamada /* 2*0a9064fbSMasahiro Yamada * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org> 3*0a9064fbSMasahiro Yamada * Released under the terms of the GNU GPL v2.0. 4*0a9064fbSMasahiro Yamada */ 5*0a9064fbSMasahiro Yamada 6*0a9064fbSMasahiro Yamada #if QT_VERSION < 0x040000 7*0a9064fbSMasahiro Yamada #include <qlistview.h> 8*0a9064fbSMasahiro Yamada #else 9*0a9064fbSMasahiro Yamada #include <q3listview.h> 10*0a9064fbSMasahiro Yamada #endif 11*0a9064fbSMasahiro Yamada #include <qsettings.h> 12*0a9064fbSMasahiro Yamada 13*0a9064fbSMasahiro Yamada #if QT_VERSION < 0x040000 14*0a9064fbSMasahiro Yamada #define Q3ValueList QValueList 15*0a9064fbSMasahiro Yamada #define Q3PopupMenu QPopupMenu 16*0a9064fbSMasahiro Yamada #define Q3ListView QListView 17*0a9064fbSMasahiro Yamada #define Q3ListViewItem QListViewItem 18*0a9064fbSMasahiro Yamada #define Q3VBox QVBox 19*0a9064fbSMasahiro Yamada #define Q3TextBrowser QTextBrowser 20*0a9064fbSMasahiro Yamada #define Q3MainWindow QMainWindow 21*0a9064fbSMasahiro Yamada #define Q3Action QAction 22*0a9064fbSMasahiro Yamada #define Q3ToolBar QToolBar 23*0a9064fbSMasahiro Yamada #define Q3ListViewItemIterator QListViewItemIterator 24*0a9064fbSMasahiro Yamada #define Q3FileDialog QFileDialog 25*0a9064fbSMasahiro Yamada #endif 26*0a9064fbSMasahiro Yamada 27*0a9064fbSMasahiro Yamada class ConfigView; 28*0a9064fbSMasahiro Yamada class ConfigList; 29*0a9064fbSMasahiro Yamada class ConfigItem; 30*0a9064fbSMasahiro Yamada class ConfigLineEdit; 31*0a9064fbSMasahiro Yamada class ConfigMainWindow; 32*0a9064fbSMasahiro Yamada 33*0a9064fbSMasahiro Yamada class ConfigSettings : public QSettings { 34*0a9064fbSMasahiro Yamada public: 35*0a9064fbSMasahiro Yamada ConfigSettings(); 36*0a9064fbSMasahiro Yamada Q3ValueList<int> readSizes(const QString& key, bool *ok); 37*0a9064fbSMasahiro Yamada bool writeSizes(const QString& key, const Q3ValueList<int>& value); 38*0a9064fbSMasahiro Yamada }; 39*0a9064fbSMasahiro Yamada 40*0a9064fbSMasahiro Yamada enum colIdx { 41*0a9064fbSMasahiro Yamada promptColIdx, nameColIdx, noColIdx, modColIdx, yesColIdx, dataColIdx, colNr 42*0a9064fbSMasahiro Yamada }; 43*0a9064fbSMasahiro Yamada enum listMode { 44*0a9064fbSMasahiro Yamada singleMode, menuMode, symbolMode, fullMode, listMode 45*0a9064fbSMasahiro Yamada }; 46*0a9064fbSMasahiro Yamada enum optionMode { 47*0a9064fbSMasahiro Yamada normalOpt = 0, allOpt, promptOpt 48*0a9064fbSMasahiro Yamada }; 49*0a9064fbSMasahiro Yamada 50*0a9064fbSMasahiro Yamada class ConfigList : public Q3ListView { 51*0a9064fbSMasahiro Yamada Q_OBJECT 52*0a9064fbSMasahiro Yamada typedef class Q3ListView Parent; 53*0a9064fbSMasahiro Yamada public: 54*0a9064fbSMasahiro Yamada ConfigList(ConfigView* p, const char *name = 0); 55*0a9064fbSMasahiro Yamada void reinit(void); 56*0a9064fbSMasahiro Yamada ConfigView* parent(void) const 57*0a9064fbSMasahiro Yamada { 58*0a9064fbSMasahiro Yamada return (ConfigView*)Parent::parent(); 59*0a9064fbSMasahiro Yamada } 60*0a9064fbSMasahiro Yamada ConfigItem* findConfigItem(struct menu *); 61*0a9064fbSMasahiro Yamada 62*0a9064fbSMasahiro Yamada protected: 63*0a9064fbSMasahiro Yamada void keyPressEvent(QKeyEvent *e); 64*0a9064fbSMasahiro Yamada void contentsMousePressEvent(QMouseEvent *e); 65*0a9064fbSMasahiro Yamada void contentsMouseReleaseEvent(QMouseEvent *e); 66*0a9064fbSMasahiro Yamada void contentsMouseMoveEvent(QMouseEvent *e); 67*0a9064fbSMasahiro Yamada void contentsMouseDoubleClickEvent(QMouseEvent *e); 68*0a9064fbSMasahiro Yamada void focusInEvent(QFocusEvent *e); 69*0a9064fbSMasahiro Yamada void contextMenuEvent(QContextMenuEvent *e); 70*0a9064fbSMasahiro Yamada 71*0a9064fbSMasahiro Yamada public slots: 72*0a9064fbSMasahiro Yamada void setRootMenu(struct menu *menu); 73*0a9064fbSMasahiro Yamada 74*0a9064fbSMasahiro Yamada void updateList(ConfigItem *item); 75*0a9064fbSMasahiro Yamada void setValue(ConfigItem* item, tristate val); 76*0a9064fbSMasahiro Yamada void changeValue(ConfigItem* item); 77*0a9064fbSMasahiro Yamada void updateSelection(void); 78*0a9064fbSMasahiro Yamada void saveSettings(void); 79*0a9064fbSMasahiro Yamada signals: 80*0a9064fbSMasahiro Yamada void menuChanged(struct menu *menu); 81*0a9064fbSMasahiro Yamada void menuSelected(struct menu *menu); 82*0a9064fbSMasahiro Yamada void parentSelected(void); 83*0a9064fbSMasahiro Yamada void gotFocus(struct menu *); 84*0a9064fbSMasahiro Yamada 85*0a9064fbSMasahiro Yamada public: 86*0a9064fbSMasahiro Yamada void updateListAll(void) 87*0a9064fbSMasahiro Yamada { 88*0a9064fbSMasahiro Yamada updateAll = true; 89*0a9064fbSMasahiro Yamada updateList(NULL); 90*0a9064fbSMasahiro Yamada updateAll = false; 91*0a9064fbSMasahiro Yamada } 92*0a9064fbSMasahiro Yamada ConfigList* listView() 93*0a9064fbSMasahiro Yamada { 94*0a9064fbSMasahiro Yamada return this; 95*0a9064fbSMasahiro Yamada } 96*0a9064fbSMasahiro Yamada ConfigItem* firstChild() const 97*0a9064fbSMasahiro Yamada { 98*0a9064fbSMasahiro Yamada return (ConfigItem *)Parent::firstChild(); 99*0a9064fbSMasahiro Yamada } 100*0a9064fbSMasahiro Yamada int mapIdx(colIdx idx) 101*0a9064fbSMasahiro Yamada { 102*0a9064fbSMasahiro Yamada return colMap[idx]; 103*0a9064fbSMasahiro Yamada } 104*0a9064fbSMasahiro Yamada void addColumn(colIdx idx, const QString& label) 105*0a9064fbSMasahiro Yamada { 106*0a9064fbSMasahiro Yamada colMap[idx] = Parent::addColumn(label); 107*0a9064fbSMasahiro Yamada colRevMap[colMap[idx]] = idx; 108*0a9064fbSMasahiro Yamada } 109*0a9064fbSMasahiro Yamada void removeColumn(colIdx idx) 110*0a9064fbSMasahiro Yamada { 111*0a9064fbSMasahiro Yamada int col = colMap[idx]; 112*0a9064fbSMasahiro Yamada if (col >= 0) { 113*0a9064fbSMasahiro Yamada Parent::removeColumn(col); 114*0a9064fbSMasahiro Yamada colRevMap[col] = colMap[idx] = -1; 115*0a9064fbSMasahiro Yamada } 116*0a9064fbSMasahiro Yamada } 117*0a9064fbSMasahiro Yamada void setAllOpen(bool open); 118*0a9064fbSMasahiro Yamada void setParentMenu(void); 119*0a9064fbSMasahiro Yamada 120*0a9064fbSMasahiro Yamada bool menuSkip(struct menu *); 121*0a9064fbSMasahiro Yamada 122*0a9064fbSMasahiro Yamada template <class P> 123*0a9064fbSMasahiro Yamada void updateMenuList(P*, struct menu*); 124*0a9064fbSMasahiro Yamada 125*0a9064fbSMasahiro Yamada bool updateAll; 126*0a9064fbSMasahiro Yamada 127*0a9064fbSMasahiro Yamada QPixmap symbolYesPix, symbolModPix, symbolNoPix; 128*0a9064fbSMasahiro Yamada QPixmap choiceYesPix, choiceNoPix; 129*0a9064fbSMasahiro Yamada QPixmap menuPix, menuInvPix, menuBackPix, voidPix; 130*0a9064fbSMasahiro Yamada 131*0a9064fbSMasahiro Yamada bool showName, showRange, showData; 132*0a9064fbSMasahiro Yamada enum listMode mode; 133*0a9064fbSMasahiro Yamada enum optionMode optMode; 134*0a9064fbSMasahiro Yamada struct menu *rootEntry; 135*0a9064fbSMasahiro Yamada QColorGroup disabledColorGroup; 136*0a9064fbSMasahiro Yamada QColorGroup inactivedColorGroup; 137*0a9064fbSMasahiro Yamada Q3PopupMenu* headerPopup; 138*0a9064fbSMasahiro Yamada 139*0a9064fbSMasahiro Yamada private: 140*0a9064fbSMasahiro Yamada int colMap[colNr]; 141*0a9064fbSMasahiro Yamada int colRevMap[colNr]; 142*0a9064fbSMasahiro Yamada }; 143*0a9064fbSMasahiro Yamada 144*0a9064fbSMasahiro Yamada class ConfigItem : public Q3ListViewItem { 145*0a9064fbSMasahiro Yamada typedef class Q3ListViewItem Parent; 146*0a9064fbSMasahiro Yamada public: 147*0a9064fbSMasahiro Yamada ConfigItem(Q3ListView *parent, ConfigItem *after, struct menu *m, bool v) 148*0a9064fbSMasahiro Yamada : Parent(parent, after), menu(m), visible(v), goParent(false) 149*0a9064fbSMasahiro Yamada { 150*0a9064fbSMasahiro Yamada init(); 151*0a9064fbSMasahiro Yamada } 152*0a9064fbSMasahiro Yamada ConfigItem(ConfigItem *parent, ConfigItem *after, struct menu *m, bool v) 153*0a9064fbSMasahiro Yamada : Parent(parent, after), menu(m), visible(v), goParent(false) 154*0a9064fbSMasahiro Yamada { 155*0a9064fbSMasahiro Yamada init(); 156*0a9064fbSMasahiro Yamada } 157*0a9064fbSMasahiro Yamada ConfigItem(Q3ListView *parent, ConfigItem *after, bool v) 158*0a9064fbSMasahiro Yamada : Parent(parent, after), menu(0), visible(v), goParent(true) 159*0a9064fbSMasahiro Yamada { 160*0a9064fbSMasahiro Yamada init(); 161*0a9064fbSMasahiro Yamada } 162*0a9064fbSMasahiro Yamada ~ConfigItem(void); 163*0a9064fbSMasahiro Yamada void init(void); 164*0a9064fbSMasahiro Yamada void okRename(int col); 165*0a9064fbSMasahiro Yamada void updateMenu(void); 166*0a9064fbSMasahiro Yamada void testUpdateMenu(bool v); 167*0a9064fbSMasahiro Yamada ConfigList* listView() const 168*0a9064fbSMasahiro Yamada { 169*0a9064fbSMasahiro Yamada return (ConfigList*)Parent::listView(); 170*0a9064fbSMasahiro Yamada } 171*0a9064fbSMasahiro Yamada ConfigItem* firstChild() const 172*0a9064fbSMasahiro Yamada { 173*0a9064fbSMasahiro Yamada return (ConfigItem *)Parent::firstChild(); 174*0a9064fbSMasahiro Yamada } 175*0a9064fbSMasahiro Yamada ConfigItem* nextSibling() const 176*0a9064fbSMasahiro Yamada { 177*0a9064fbSMasahiro Yamada return (ConfigItem *)Parent::nextSibling(); 178*0a9064fbSMasahiro Yamada } 179*0a9064fbSMasahiro Yamada void setText(colIdx idx, const QString& text) 180*0a9064fbSMasahiro Yamada { 181*0a9064fbSMasahiro Yamada Parent::setText(listView()->mapIdx(idx), text); 182*0a9064fbSMasahiro Yamada } 183*0a9064fbSMasahiro Yamada QString text(colIdx idx) const 184*0a9064fbSMasahiro Yamada { 185*0a9064fbSMasahiro Yamada return Parent::text(listView()->mapIdx(idx)); 186*0a9064fbSMasahiro Yamada } 187*0a9064fbSMasahiro Yamada void setPixmap(colIdx idx, const QPixmap& pm) 188*0a9064fbSMasahiro Yamada { 189*0a9064fbSMasahiro Yamada Parent::setPixmap(listView()->mapIdx(idx), pm); 190*0a9064fbSMasahiro Yamada } 191*0a9064fbSMasahiro Yamada const QPixmap* pixmap(colIdx idx) const 192*0a9064fbSMasahiro Yamada { 193*0a9064fbSMasahiro Yamada return Parent::pixmap(listView()->mapIdx(idx)); 194*0a9064fbSMasahiro Yamada } 195*0a9064fbSMasahiro Yamada void paintCell(QPainter* p, const QColorGroup& cg, int column, int width, int align); 196*0a9064fbSMasahiro Yamada 197*0a9064fbSMasahiro Yamada ConfigItem* nextItem; 198*0a9064fbSMasahiro Yamada struct menu *menu; 199*0a9064fbSMasahiro Yamada bool visible; 200*0a9064fbSMasahiro Yamada bool goParent; 201*0a9064fbSMasahiro Yamada }; 202*0a9064fbSMasahiro Yamada 203*0a9064fbSMasahiro Yamada class ConfigLineEdit : public QLineEdit { 204*0a9064fbSMasahiro Yamada Q_OBJECT 205*0a9064fbSMasahiro Yamada typedef class QLineEdit Parent; 206*0a9064fbSMasahiro Yamada public: 207*0a9064fbSMasahiro Yamada ConfigLineEdit(ConfigView* parent); 208*0a9064fbSMasahiro Yamada ConfigView* parent(void) const 209*0a9064fbSMasahiro Yamada { 210*0a9064fbSMasahiro Yamada return (ConfigView*)Parent::parent(); 211*0a9064fbSMasahiro Yamada } 212*0a9064fbSMasahiro Yamada void show(ConfigItem *i); 213*0a9064fbSMasahiro Yamada void keyPressEvent(QKeyEvent *e); 214*0a9064fbSMasahiro Yamada 215*0a9064fbSMasahiro Yamada public: 216*0a9064fbSMasahiro Yamada ConfigItem *item; 217*0a9064fbSMasahiro Yamada }; 218*0a9064fbSMasahiro Yamada 219*0a9064fbSMasahiro Yamada class ConfigView : public Q3VBox { 220*0a9064fbSMasahiro Yamada Q_OBJECT 221*0a9064fbSMasahiro Yamada typedef class Q3VBox Parent; 222*0a9064fbSMasahiro Yamada public: 223*0a9064fbSMasahiro Yamada ConfigView(QWidget* parent, const char *name = 0); 224*0a9064fbSMasahiro Yamada ~ConfigView(void); 225*0a9064fbSMasahiro Yamada static void updateList(ConfigItem* item); 226*0a9064fbSMasahiro Yamada static void updateListAll(void); 227*0a9064fbSMasahiro Yamada 228*0a9064fbSMasahiro Yamada bool showName(void) const { return list->showName; } 229*0a9064fbSMasahiro Yamada bool showRange(void) const { return list->showRange; } 230*0a9064fbSMasahiro Yamada bool showData(void) const { return list->showData; } 231*0a9064fbSMasahiro Yamada public slots: 232*0a9064fbSMasahiro Yamada void setShowName(bool); 233*0a9064fbSMasahiro Yamada void setShowRange(bool); 234*0a9064fbSMasahiro Yamada void setShowData(bool); 235*0a9064fbSMasahiro Yamada void setOptionMode(QAction *); 236*0a9064fbSMasahiro Yamada signals: 237*0a9064fbSMasahiro Yamada void showNameChanged(bool); 238*0a9064fbSMasahiro Yamada void showRangeChanged(bool); 239*0a9064fbSMasahiro Yamada void showDataChanged(bool); 240*0a9064fbSMasahiro Yamada public: 241*0a9064fbSMasahiro Yamada ConfigList* list; 242*0a9064fbSMasahiro Yamada ConfigLineEdit* lineEdit; 243*0a9064fbSMasahiro Yamada 244*0a9064fbSMasahiro Yamada static ConfigView* viewList; 245*0a9064fbSMasahiro Yamada ConfigView* nextView; 246*0a9064fbSMasahiro Yamada 247*0a9064fbSMasahiro Yamada static QAction *showNormalAction; 248*0a9064fbSMasahiro Yamada static QAction *showAllAction; 249*0a9064fbSMasahiro Yamada static QAction *showPromptAction; 250*0a9064fbSMasahiro Yamada }; 251*0a9064fbSMasahiro Yamada 252*0a9064fbSMasahiro Yamada class ConfigInfoView : public Q3TextBrowser { 253*0a9064fbSMasahiro Yamada Q_OBJECT 254*0a9064fbSMasahiro Yamada typedef class Q3TextBrowser Parent; 255*0a9064fbSMasahiro Yamada public: 256*0a9064fbSMasahiro Yamada ConfigInfoView(QWidget* parent, const char *name = 0); 257*0a9064fbSMasahiro Yamada bool showDebug(void) const { return _showDebug; } 258*0a9064fbSMasahiro Yamada 259*0a9064fbSMasahiro Yamada public slots: 260*0a9064fbSMasahiro Yamada void setInfo(struct menu *menu); 261*0a9064fbSMasahiro Yamada void saveSettings(void); 262*0a9064fbSMasahiro Yamada void setShowDebug(bool); 263*0a9064fbSMasahiro Yamada 264*0a9064fbSMasahiro Yamada signals: 265*0a9064fbSMasahiro Yamada void showDebugChanged(bool); 266*0a9064fbSMasahiro Yamada void menuSelected(struct menu *); 267*0a9064fbSMasahiro Yamada 268*0a9064fbSMasahiro Yamada protected: 269*0a9064fbSMasahiro Yamada void symbolInfo(void); 270*0a9064fbSMasahiro Yamada void menuInfo(void); 271*0a9064fbSMasahiro Yamada QString debug_info(struct symbol *sym); 272*0a9064fbSMasahiro Yamada static QString print_filter(const QString &str); 273*0a9064fbSMasahiro Yamada static void expr_print_help(void *data, struct symbol *sym, const char *str); 274*0a9064fbSMasahiro Yamada Q3PopupMenu* createPopupMenu(const QPoint& pos); 275*0a9064fbSMasahiro Yamada void contentsContextMenuEvent(QContextMenuEvent *e); 276*0a9064fbSMasahiro Yamada 277*0a9064fbSMasahiro Yamada struct symbol *sym; 278*0a9064fbSMasahiro Yamada struct menu *_menu; 279*0a9064fbSMasahiro Yamada bool _showDebug; 280*0a9064fbSMasahiro Yamada }; 281*0a9064fbSMasahiro Yamada 282*0a9064fbSMasahiro Yamada class ConfigSearchWindow : public QDialog { 283*0a9064fbSMasahiro Yamada Q_OBJECT 284*0a9064fbSMasahiro Yamada typedef class QDialog Parent; 285*0a9064fbSMasahiro Yamada public: 286*0a9064fbSMasahiro Yamada ConfigSearchWindow(ConfigMainWindow* parent, const char *name = 0); 287*0a9064fbSMasahiro Yamada 288*0a9064fbSMasahiro Yamada public slots: 289*0a9064fbSMasahiro Yamada void saveSettings(void); 290*0a9064fbSMasahiro Yamada void search(void); 291*0a9064fbSMasahiro Yamada 292*0a9064fbSMasahiro Yamada protected: 293*0a9064fbSMasahiro Yamada QLineEdit* editField; 294*0a9064fbSMasahiro Yamada QPushButton* searchButton; 295*0a9064fbSMasahiro Yamada QSplitter* split; 296*0a9064fbSMasahiro Yamada ConfigView* list; 297*0a9064fbSMasahiro Yamada ConfigInfoView* info; 298*0a9064fbSMasahiro Yamada 299*0a9064fbSMasahiro Yamada struct symbol **result; 300*0a9064fbSMasahiro Yamada }; 301*0a9064fbSMasahiro Yamada 302*0a9064fbSMasahiro Yamada class ConfigMainWindow : public Q3MainWindow { 303*0a9064fbSMasahiro Yamada Q_OBJECT 304*0a9064fbSMasahiro Yamada 305*0a9064fbSMasahiro Yamada static Q3Action *saveAction; 306*0a9064fbSMasahiro Yamada static void conf_changed(void); 307*0a9064fbSMasahiro Yamada public: 308*0a9064fbSMasahiro Yamada ConfigMainWindow(void); 309*0a9064fbSMasahiro Yamada public slots: 310*0a9064fbSMasahiro Yamada void changeMenu(struct menu *); 311*0a9064fbSMasahiro Yamada void setMenuLink(struct menu *); 312*0a9064fbSMasahiro Yamada void listFocusChanged(void); 313*0a9064fbSMasahiro Yamada void goBack(void); 314*0a9064fbSMasahiro Yamada void loadConfig(void); 315*0a9064fbSMasahiro Yamada bool saveConfig(void); 316*0a9064fbSMasahiro Yamada void saveConfigAs(void); 317*0a9064fbSMasahiro Yamada void searchConfig(void); 318*0a9064fbSMasahiro Yamada void showSingleView(void); 319*0a9064fbSMasahiro Yamada void showSplitView(void); 320*0a9064fbSMasahiro Yamada void showFullView(void); 321*0a9064fbSMasahiro Yamada void showIntro(void); 322*0a9064fbSMasahiro Yamada void showAbout(void); 323*0a9064fbSMasahiro Yamada void saveSettings(void); 324*0a9064fbSMasahiro Yamada 325*0a9064fbSMasahiro Yamada protected: 326*0a9064fbSMasahiro Yamada void closeEvent(QCloseEvent *e); 327*0a9064fbSMasahiro Yamada 328*0a9064fbSMasahiro Yamada ConfigSearchWindow *searchWindow; 329*0a9064fbSMasahiro Yamada ConfigView *menuView; 330*0a9064fbSMasahiro Yamada ConfigList *menuList; 331*0a9064fbSMasahiro Yamada ConfigView *configView; 332*0a9064fbSMasahiro Yamada ConfigList *configList; 333*0a9064fbSMasahiro Yamada ConfigInfoView *helpText; 334*0a9064fbSMasahiro Yamada Q3ToolBar *toolBar; 335*0a9064fbSMasahiro Yamada Q3Action *backAction; 336*0a9064fbSMasahiro Yamada QSplitter* split1; 337*0a9064fbSMasahiro Yamada QSplitter* split2; 338*0a9064fbSMasahiro Yamada }; 339