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