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