| 
									
										
										
										
											2009-02-25 09:15:00 +01:00
										 |  |  | /**************************************************************************
 | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | ** | 
					
						
							|  |  |  | ** This file is part of Qt Creator | 
					
						
							|  |  |  | ** | 
					
						
							| 
									
										
										
										
											2009-02-25 09:15:00 +01:00
										 |  |  | ** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | ** | 
					
						
							| 
									
										
										
										
											2009-06-17 00:01:27 +10:00
										 |  |  | ** Contact: Nokia Corporation (qt-info@nokia.com) | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | ** | 
					
						
							| 
									
										
										
										
											2009-02-25 09:15:00 +01:00
										 |  |  | ** Commercial Usage | 
					
						
							| 
									
										
										
										
											2008-12-02 14:17:16 +01:00
										 |  |  | ** | 
					
						
							| 
									
										
										
										
											2009-02-25 09:15:00 +01:00
										 |  |  | ** Licensees holding valid Qt Commercial licenses may use this file in | 
					
						
							|  |  |  | ** accordance with the Qt Commercial License Agreement provided with the | 
					
						
							|  |  |  | ** Software or, alternatively, in accordance with the terms contained in | 
					
						
							|  |  |  | ** a written agreement between you and Nokia. | 
					
						
							| 
									
										
										
										
											2008-12-02 14:17:16 +01:00
										 |  |  | ** | 
					
						
							| 
									
										
										
										
											2009-02-25 09:15:00 +01:00
										 |  |  | ** GNU Lesser General Public License Usage | 
					
						
							| 
									
										
										
										
											2008-12-02 14:17:16 +01:00
										 |  |  | ** | 
					
						
							| 
									
										
										
										
											2009-02-25 09:15:00 +01:00
										 |  |  | ** Alternatively, this file may be used under the terms of the GNU Lesser | 
					
						
							|  |  |  | ** General Public License version 2.1 as published by the Free Software | 
					
						
							|  |  |  | ** Foundation and appearing in the file LICENSE.LGPL included in the | 
					
						
							|  |  |  | ** packaging of this file.  Please review the following information to | 
					
						
							|  |  |  | ** ensure the GNU Lesser General Public License version 2.1 requirements | 
					
						
							|  |  |  | ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
 | 
					
						
							| 
									
										
										
										
											2008-12-02 14:17:16 +01:00
										 |  |  | ** | 
					
						
							| 
									
										
										
										
											2009-02-25 09:15:00 +01:00
										 |  |  | ** If you are unsure which license is appropriate for your use, please | 
					
						
							| 
									
										
										
										
											2009-08-14 09:30:56 +02:00
										 |  |  | ** contact the sales department at http://qt.nokia.com/contact.
 | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | ** | 
					
						
							| 
									
										
										
										
											2009-02-25 09:15:00 +01:00
										 |  |  | **************************************************************************/ | 
					
						
							| 
									
										
										
										
											2008-12-02 15:08:31 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | #include "registerwindow.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-24 14:41:15 +01:00
										 |  |  | #include "debuggeractions.h"
 | 
					
						
							| 
									
										
										
										
											2009-08-14 13:04:05 +02:00
										 |  |  | #include "debuggeragents.h"
 | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | #include "debuggerconstants.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-24 14:41:15 +01:00
										 |  |  | #include <QtCore/QDebug>
 | 
					
						
							|  |  |  | #include <QtCore/QDir>
 | 
					
						
							|  |  |  | #include <QtCore/QFileInfo>
 | 
					
						
							|  |  |  | #include <QtCore/QFileInfoList>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <QtGui/QAction>
 | 
					
						
							|  |  |  | #include <QtGui/QHeaderView>
 | 
					
						
							|  |  |  | #include <QtGui/QMenu>
 | 
					
						
							|  |  |  | #include <QtGui/QResizeEvent>
 | 
					
						
							|  |  |  | #include <QtGui/QToolButton>
 | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | using namespace Debugger::Internal; | 
					
						
							|  |  |  | using namespace Debugger::Constants; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-14 13:04:05 +02:00
										 |  |  | RegisterWindow::RegisterWindow(DebuggerManager *manager) | 
					
						
							|  |  |  |   : m_manager(manager), m_alwaysResizeColumnsToContents(true), | 
					
						
							|  |  |  |     m_alwaysReloadContents(false) | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2009-05-05 10:14:35 +02:00
										 |  |  |     QAction *act = theDebuggerAction(UseAlternatingRowColors); | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |     setWindowTitle(tr("Registers")); | 
					
						
							|  |  |  |     setSortingEnabled(true); | 
					
						
							| 
									
										
										
										
											2009-05-05 10:14:35 +02:00
										 |  |  |     setAlternatingRowColors(act->isChecked()); | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |     setRootIsDecorated(false); | 
					
						
							| 
									
										
										
										
											2009-05-05 10:14:35 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     connect(act, SIGNAL(toggled(bool)), | 
					
						
							|  |  |  |         this, SLOT(setAlternatingRowColorsHelper(bool))); | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void RegisterWindow::resizeEvent(QResizeEvent *ev) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     QTreeView::resizeEvent(ev); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void RegisterWindow::contextMenuEvent(QContextMenuEvent *ev) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     QMenu menu; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-13 16:16:19 +02:00
										 |  |  |     QAction *actAdjust = menu.addAction(tr("Adjust column widths to contents")); | 
					
						
							|  |  |  |     QAction *actAlwaysAdjust = | 
					
						
							|  |  |  |         menu.addAction(tr("Always adjust column widths to contents")); | 
					
						
							|  |  |  |     actAlwaysAdjust->setCheckable(true); | 
					
						
							|  |  |  |     actAlwaysAdjust->setChecked(m_alwaysResizeColumnsToContents); | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-13 16:16:19 +02:00
										 |  |  |     QAction *actReload = menu.addAction(tr("Reload register listing")); | 
					
						
							|  |  |  |     QAction *actAlwaysReload = menu.addAction(tr("Always reload register listing")); | 
					
						
							|  |  |  |     actAlwaysReload->setCheckable(true); | 
					
						
							|  |  |  |     actAlwaysReload->setChecked(m_alwaysReloadContents); | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |     menu.addSeparator(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-14 13:04:05 +02:00
										 |  |  |     QModelIndex idx = indexAt(ev->pos()); | 
					
						
							|  |  |  |     QString address = model()->data(idx, Qt::UserRole + 1).toString(); | 
					
						
							|  |  |  |     QAction *actShowMemory = menu.addAction(QString()); | 
					
						
							|  |  |  |     if (address.isEmpty()) { | 
					
						
							|  |  |  |         actShowMemory->setText(tr("Open memory editor")); | 
					
						
							|  |  |  |         actShowMemory->setEnabled(false); | 
					
						
							|  |  |  |     } else { | 
					
						
							|  |  |  |         actShowMemory->setText(tr("Open memory editor at %1").arg(address)); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     menu.addSeparator(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-13 16:16:19 +02:00
										 |  |  |     int base = model()->data(QModelIndex(), Qt::UserRole).toInt(); | 
					
						
							|  |  |  |     QAction *act16 = menu.addAction(tr("Hexadecimal")); | 
					
						
							|  |  |  |     act16->setCheckable(true); | 
					
						
							|  |  |  |     act16->setChecked(base == 16); | 
					
						
							|  |  |  |     QAction *act10 = menu.addAction(tr("Decimal")); | 
					
						
							|  |  |  |     act10->setCheckable(true); | 
					
						
							|  |  |  |     act10->setChecked(base == 10); | 
					
						
							|  |  |  |     QAction *act8 = menu.addAction(tr("Octal")); | 
					
						
							|  |  |  |     act8->setCheckable(true); | 
					
						
							|  |  |  |     act8->setChecked(base == 8); | 
					
						
							|  |  |  |     QAction *act2 = menu.addAction(tr("Binary")); | 
					
						
							|  |  |  |     act2->setCheckable(true); | 
					
						
							|  |  |  |     act2->setChecked(base == 2); | 
					
						
							| 
									
										
										
										
											2009-03-24 14:41:15 +01:00
										 |  |  |     menu.addSeparator(); | 
					
						
							| 
									
										
										
										
											2009-08-13 16:16:19 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-24 14:41:15 +01:00
										 |  |  |     menu.addAction(theDebuggerAction(SettingsDialog)); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |     QAction *act = menu.exec(ev->globalPos()); | 
					
						
							| 
									
										
										
										
											2009-08-13 16:16:19 +02:00
										 |  |  |      | 
					
						
							|  |  |  |     if (act == actAdjust) | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |         resizeColumnsToContents(); | 
					
						
							| 
									
										
										
										
											2009-08-13 16:16:19 +02:00
										 |  |  |     else if (act == actAlwaysAdjust) | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |         setAlwaysResizeColumnsToContents(!m_alwaysResizeColumnsToContents); | 
					
						
							| 
									
										
										
										
											2009-08-13 16:16:19 +02:00
										 |  |  |     else if (act == actReload) | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |         reloadContents(); | 
					
						
							| 
									
										
										
										
											2009-08-13 16:16:19 +02:00
										 |  |  |     else if (act == actAlwaysReload) | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |         setAlwaysReloadContents(!m_alwaysReloadContents); | 
					
						
							| 
									
										
										
										
											2009-08-14 13:04:05 +02:00
										 |  |  |     else if (act == actShowMemory) | 
					
						
							|  |  |  |         (void) new MemoryViewAgent(m_manager, address); | 
					
						
							| 
									
										
										
										
											2009-08-13 16:16:19 +02:00
										 |  |  |     else if (act) { | 
					
						
							|  |  |  |         base = (act == act10 ? 10 : act == act8 ? 8 : act == act2 ? 2 : 16); | 
					
						
							|  |  |  |         QMetaObject::invokeMethod(model(), "setNumberBase", Q_ARG(int, base)); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void RegisterWindow::resizeColumnsToContents() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     resizeColumnToContents(0); | 
					
						
							|  |  |  |     resizeColumnToContents(1); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void RegisterWindow::setAlwaysResizeColumnsToContents(bool on) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     m_alwaysResizeColumnsToContents = on; | 
					
						
							|  |  |  |     QHeaderView::ResizeMode mode = on | 
					
						
							|  |  |  |         ? QHeaderView::ResizeToContents : QHeaderView::Interactive; | 
					
						
							|  |  |  |     header()->setResizeMode(0, mode); | 
					
						
							|  |  |  |     header()->setResizeMode(1, mode); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void RegisterWindow::setAlwaysReloadContents(bool on) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     m_alwaysReloadContents = on; | 
					
						
							|  |  |  |     if (m_alwaysReloadContents) | 
					
						
							|  |  |  |         reloadContents(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void RegisterWindow::reloadContents() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     emit reloadRegisterRequested(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void RegisterWindow::setModel(QAbstractItemModel *model) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     QTreeView::setModel(model); | 
					
						
							|  |  |  |     setAlwaysResizeColumnsToContents(true); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  |      |