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