specHistoryWidget::specHistoryWidget(QUndoStack* stack, QWidget* parent) : specDockWidget(tr("History"), parent), undoView(new QUndoView(stack, this)) { setWhatsThis("Undo history. Click on any command to forward/rewind to that particular state."); toggleViewAction()->setIcon(QIcon::fromTheme("view-history")) ; toggleViewAction()->setWhatsThis(tr("Shows and hides the undo history.")); setObjectName(tr("History window")); toggleViewAction()->setText(tr("Toggle undo window")); setupWindow(0); }
ActionLoader::ActionLoader(QMainWindow *par): parent(par) { //intiialize toolboxes auto newToolbar = new QToolBar("New curve toolbar",this->parent); this->initializeNewToolBar(newToolbar); parent->addToolBar(Qt::TopToolBarArea,newToolbar); ((MainWindow *)parent)->ui->menu_Window->addAction(newToolbar->toggleViewAction()); auto editToolbar = new QToolBar("Edit curve toolbar",this->parent); this->initializeEditToolBar(editToolbar); parent->addToolBar(editToolbar); ((MainWindow *)parent)->ui->menu_Window->addAction(editToolbar->toggleViewAction()); }
RecentDock::RecentDock(QWidget *parent) : QDockWidget(parent), ui(new Ui::RecentDock) { LOG_DEBUG() << "begin"; ui->setupUi(this); toggleViewAction()->setIcon(windowIcon()); m_recent = Settings.recent(); #ifdef Q_OS_WIN // Remove bad entries on Windows due to bug in v17.01. QStringList newList; bool isRepaired = false; foreach (QString s, m_recent) { if (s.size() >=3 && s[0] == '/' && s[2] == ':') { s.remove(0, 1); isRepaired = true; } newList << s; } if (isRepaired) { m_recent = newList; Settings.setRecent(m_recent); Settings.sync(); } #endif ui->listWidget->setDragEnabled(true); ui->listWidget->setDragDropMode(QAbstractItemView::DragOnly); foreach (QString s, m_recent) { QStandardItem* item = new QStandardItem(Util::baseName(s)); item->setToolTip(QDir::toNativeSeparators(s)); m_model.appendRow(item); }
/*! \details Create a new pQueuedMessageToolBar object \param parent The parent widget */ pQueuedMessageToolBar::pQueuedMessageToolBar( QWidget* parent ) : QToolBar( parent ) { setMovable( false ); setFloatable( false ); setAllowedAreas( Qt::TopToolBarArea ); toggleViewAction()->setEnabled( false ); toggleViewAction()->setVisible( false ); mDefaultPalette = palette(); // create pQueuedMessageWidget mQueuedWidget = new pQueuedMessageWidget( this ); addWidget( mQueuedWidget ); // connections connect( mQueuedWidget, SIGNAL( messageShown( const pQueuedMessage& ) ), this, SLOT( messageShown( const pQueuedMessage& ) ) ); connect( mQueuedWidget, SIGNAL( cleared() ), this, SLOT( messageCleared() ) ); }
void ToolView::setup(const QString &label) { setFeatures(AllDockWidgetFeatures); m_button = new TViewButton(this); m_button->setToolTip(label); connect(toggleViewAction(), SIGNAL(toggled(bool)), this, SLOT(saveSize(bool))); }
EncodeDock::EncodeDock(QWidget *parent) : QDockWidget(parent), ui(new Ui::EncodeDock), m_presets(Mlt::Repository::presets()), m_immediateJob(0), m_profiles(Mlt::Profile::list()) { LOG_DEBUG() << "begin"; ui->setupUi(this); ui->stopCaptureButton->hide(); ui->videoCodecThreadsSpinner->setMaximum(QThread::idealThreadCount()); if (QThread::idealThreadCount() < 3) ui->parallelCheckbox->setHidden(true); toggleViewAction()->setIcon(windowIcon()); connect(ui->videoBitrateCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(on_videoBufferDurationChanged())); connect(ui->videoBufferSizeSpinner, SIGNAL(valueChanged(double)), this, SLOT(on_videoBufferDurationChanged())); m_presetsModel.setSourceModel(new QStandardItemModel(this)); m_presetsModel.setFilterCaseSensitivity(Qt::CaseInsensitive); ui->presetsTree->setModel(&m_presetsModel); loadPresets(); // populate the combos Mlt::Consumer c(MLT.profile(), "avformat"); c.set("f", "list"); c.set("acodec", "list"); c.set("vcodec", "list"); c.start(); c.stop(); Mlt::Properties* p = new Mlt::Properties(c.get_data("f")); ui->formatCombo->blockSignals(true); for (int i = 0; i < p->count(); i++) ui->formatCombo->addItem(p->get(i)); delete p; ui->formatCombo->model()->sort(0); ui->formatCombo->insertItem(0, tr("Automatic from extension")); ui->formatCombo->blockSignals(false); p = new Mlt::Properties(c.get_data("acodec")); for (int i = 0; i < p->count(); i++) ui->audioCodecCombo->addItem(p->get(i)); delete p; ui->audioCodecCombo->model()->sort(0); ui->audioCodecCombo->insertItem(0, tr("Default for format")); p = new Mlt::Properties(c.get_data("vcodec")); for (int i = 0; i < p->count(); i++) ui->videoCodecCombo->addItem(p->get(i)); delete p; ui->videoCodecCombo->model()->sort(0); ui->videoCodecCombo->insertItem(0, tr("Default for format")); on_resetButton_clicked(); LOG_DEBUG() << "end"; }
EncodeDock::EncodeDock(QWidget *parent) : QDockWidget(parent), ui(new Ui::EncodeDock), m_presets(Mlt::Repository::presets()), m_immediateJob(0), m_profiles(Mlt::Profile::list()) { qDebug() << "begin"; ui->setupUi(this); #ifdef Q_OS_UNIX ui->stopCaptureButton->hide(); #else delete ui->stopCaptureButton; #endif ui->videoCodecThreadsSpinner->setMaximum(QThread::idealThreadCount()); toggleViewAction()->setIcon(windowIcon()); m_presetsModel.setSourceModel(new QStandardItemModel(this)); m_presetsModel.setFilterCaseSensitivity(Qt::CaseInsensitive); ui->presetsTree->setModel(&m_presetsModel); loadPresets(); // populate the combos Mlt::Consumer c(MLT.profile(), "avformat"); c.set("f", "list"); c.set("acodec", "list"); c.set("vcodec", "list"); c.start(); c.stop(); Mlt::Properties* p = new Mlt::Properties(c.get_data("f")); for (int i = 0; i < p->count(); i++) ui->formatCombo->addItem(p->get(i)); delete p; ui->formatCombo->model()->sort(0); ui->formatCombo->insertItem(0, tr("Automatic from extension")); ui->formatCombo->setCurrentIndex(0); p = new Mlt::Properties(c.get_data("acodec")); for (int i = 0; i < p->count(); i++) ui->audioCodecCombo->addItem(p->get(i)); delete p; ui->audioCodecCombo->model()->sort(0); ui->audioCodecCombo->insertItem(0, tr("Default for format")); ui->audioCodecCombo->setCurrentIndex(0); p = new Mlt::Properties(c.get_data("vcodec")); for (int i = 0; i < p->count(); i++) ui->videoCodecCombo->addItem(p->get(i)); delete p; ui->videoCodecCombo->model()->sort(0); ui->videoCodecCombo->insertItem(0, tr("Default for format")); ui->videoCodecCombo->setCurrentIndex(0); on_audioRateControlCombo_activated(ui->audioRateControlCombo->currentIndex()); on_videoRateControlCombo_activated(ui->videoRateControlCombo->currentIndex()); qDebug() << "end"; }
DockFrame::DockFrame(QWidget* pParent) : DockFocusable("Анимация", pParent) { PTR(context_type) pWidget = new context_type(this); pWidget->setMinimumSize(QSize(150, 200)); setWidget(pWidget); toggleViewAction()->setIcon(QIcon(QString::fromUtf8(":/images/images/dock_frame.png"))); }
pQueuedMessageToolBar::pQueuedMessageToolBar( QWidget* parent ) : QToolBar( parent ) { mQueuedWidget = new pQueuedMessageWidget( this ); setObjectName( metaObject()->className() ); setMovable( false ); setFloatable( false ); setAllowedAreas( Qt::TopToolBarArea ); toggleViewAction()->setEnabled( false ); toggleViewAction()->setVisible( false ); addWidget( mQueuedWidget ); layout()->setMargin( 3 ); // connections connect( mQueuedWidget, SIGNAL( shown( const pQueuedMessage& ) ), this, SLOT( messageShown( const pQueuedMessage& ) ) ); connect( mQueuedWidget, SIGNAL( finished() ), this, SLOT( messageFinished() ) ); }
DockFind::DockFind(QWidget* pParent) : DockFocusable("Поиск", pParent) { PTR(context_type) pWidget = new context_type(this); pWidget->setMinimumSize(QSize(300, 110)); setWidget(pWidget); toggleViewAction()->setIcon(QIcon(QString::fromUtf8(":/images/images/dock_find.png"))); }
RecentDock::RecentDock(QWidget *parent) : QDockWidget(parent), ui(new Ui::RecentDock) { ui->setupUi(this); toggleViewAction()->setIcon(QIcon::fromTheme("document-open-recent", windowIcon())); m_recent = m_settings.value("recent").toStringList(); add(QString()); ui->listWidget->setDragEnabled(true); ui->listWidget->setDragDropMode(QAbstractItemView::DragOnly); }
DockTrace::DockTrace(QWidget* pParent) : DockFocusable("Трассировка", pParent) { PTR(context_type) pWidget = new context_type(this); pWidget->setMinimumSize(QSize(300, 110)); setWidget(pWidget); toggleViewAction()->setIcon(QIcon(QString::fromUtf8(":/images/images/dock_trace.png"))); g_pTracer->setLog(&getContext()); }
RecentDock::RecentDock(QWidget *parent) : QDockWidget(parent), ui(new Ui::RecentDock) { qDebug() << "begin"; ui->setupUi(this); toggleViewAction()->setIcon(windowIcon()); m_recent = Settings.recent(); ui->listWidget->setDragEnabled(true); ui->listWidget->setDragDropMode(QAbstractItemView::DragOnly); foreach (QString s, m_recent) { QStandardItem* item = new QStandardItem(Util::baseName(s)); item->setToolTip(s); m_model.appendRow(item); }
EncodeDock::EncodeDock(QWidget *parent) : QDockWidget(parent), ui(new Ui::EncodeDock), m_presets(Mlt::Repository::presets()), m_immediateJob(0), m_profiles(Mlt::Profile::list()) { ui->setupUi(this); #ifdef Q_WS_X11 ui->stopCaptureButton->hide(); #else delete ui->stopCaptureButton; #endif ui->videoCodecThreadsSpinner->setMaximum(QThread::idealThreadCount()); toggleViewAction()->setIcon(QIcon::fromTheme("media-record", windowIcon())); ui->addPresetButton->setIcon(QIcon::fromTheme("list-add", ui->addPresetButton->icon())); ui->removePresetButton->setIcon(QIcon::fromTheme("list-remove", ui->removePresetButton->icon())); ui->reloadSignalButton->setIcon(QIcon::fromTheme("view-refresh", ui->reloadSignalButton->icon())); loadPresets(); // populate the combos Mlt::Consumer c(MLT.profile(), "avformat"); c.set("f", "list"); c.set("acodec", "list"); c.set("vcodec", "list"); c.start(); c.stop(); Mlt::Properties* p = new Mlt::Properties(c.get_data("f")); ui->formatCombo->addItem(tr("Automatic from extension")); for (int i = 0; i < p->count(); i++) ui->formatCombo->addItem(p->get(i)); delete p; p = new Mlt::Properties(c.get_data("acodec")); ui->audioCodecCombo->addItem(tr("Default for format")); for (int i = 0; i < p->count(); i++) ui->audioCodecCombo->addItem(p->get(i)); delete p; p = new Mlt::Properties(c.get_data("vcodec")); ui->videoCodecCombo->addItem(tr("Default for format")); for (int i = 0; i < p->count(); i++) ui->videoCodecCombo->addItem(p->get(i)); delete p; }
TimelineDock::TimelineDock(QWidget *parent) : QDockWidget(parent), ui(new Ui::TimelineDock), m_quickView(QmlUtilities::sharedEngine(), this), m_position(-1), m_ignoreNextPositionChange(false), m_trimDelta(0), m_transitionDelta(0) { LOG_DEBUG() << "begin"; m_selection.selectedTrack = -1; m_selection.isMultitrackSelected = false; ui->setupUi(this); toggleViewAction()->setIcon(windowIcon()); qmlRegisterType<MultitrackModel>("Shotcut.Models", 1, 0, "MultitrackModel"); QDir importPath = QmlUtilities::qmlDir(); importPath.cd("modules"); m_quickView.engine()->addImportPath(importPath.path()); m_quickView.engine()->addImageProvider(QString("thumbnail"), new ThumbnailProvider); QmlUtilities::setCommonProperties(m_quickView.rootContext()); m_quickView.rootContext()->setContextProperty("view", new QmlView(&m_quickView)); m_quickView.rootContext()->setContextProperty("timeline", this); m_quickView.rootContext()->setContextProperty("multitrack", &m_model); m_quickView.setResizeMode(QQuickWidget::SizeRootObjectToView); m_quickView.setClearColor(palette().window().color()); connect(&m_model, SIGNAL(modified()), this, SLOT(clearSelectionIfInvalid())); connect(&m_model, SIGNAL(rowsInserted(QModelIndex,int,int)), SLOT(onRowsInserted(QModelIndex,int,int))); connect(&m_model, SIGNAL(rowsRemoved(QModelIndex,int,int)), SLOT(onRowsRemoved(QModelIndex,int,int))); setWidget(&m_quickView); connect(this, SIGNAL(clipMoved(int,int,int,int,bool)), SLOT(onClipMoved(int,int,int,int,bool)), Qt::QueuedConnection); connect(this, SIGNAL(transitionAdded(int,int,int,bool)), SLOT(onTransitionAdded(int,int,int,bool)), Qt::QueuedConnection); connect(MLT.videoWidget(), SIGNAL(frameDisplayed(const SharedFrame&)), this, SLOT(onShowFrame(const SharedFrame&))); connect(this, SIGNAL(visibilityChanged(bool)), this, SLOT(load())); connect(this, SIGNAL(topLevelChanged(bool)), this, SLOT(onTopLevelChanged(bool))); LOG_DEBUG() << "end"; }
KoToolDocker::KoToolDocker(QWidget *parent) : QDockWidget(QObject::tr("Tool Options"), parent), d(new Private(this)) { setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea | Qt::TopDockWidgetArea); //KConfigGroup cfg = KGlobal::config()->group("DockWidget sharedtooldocker"); QSettings cfg("QCalligra", QCoreApplication::applicationName()); cfg.beginGroup("DockWidget sharedtooldocker"); d->tabbed = cfg.value("TabbedMode", false).toBool(); cfg.endGroup(); toggleViewAction()->setVisible(false); //should always be visible, so hide option in menu setFeatures(DockWidgetMovable|DockWidgetFloatable); setTitleBarWidget(new KoDockWidgetTitleBar(this)); connect(this, SIGNAL(dockLocationChanged(Qt::DockWidgetArea )), this, SLOT(locationChanged(Qt::DockWidgetArea))); d->housekeeperWidget = new QWidget(); d->housekeeperLayout = new QGridLayout(); d->housekeeperWidget->setLayout(d->housekeeperLayout); d->housekeeperLayout->setSizeConstraint(QLayout::SetMinAndMaxSize); d->hiderWidget = new QWidget(d->housekeeperWidget); d->hiderWidget->setVisible(false); d->scrollArea = new QScrollArea(); d->scrollArea->setWidget(d->housekeeperWidget); d->scrollArea->setFrameShape(QFrame::NoFrame); d->scrollArea->setWidgetResizable(true); d->scrollArea->setFocusPolicy(Qt::NoFocus); setWidget(d->scrollArea); d->tabButton = new QToolButton(this); // parent hack in toggleLock to keep it clickable d->tabButton->setIcon(d->tabIcon); d->tabButton->setToolTip(QObject::tr("Toggles organising the options in tabs or not")); d->tabButton->setAutoRaise(true); connect(d->tabButton, SIGNAL(clicked()), SLOT(toggleTab())); d->tabButton->resize(d->tabButton->sizeHint()); }
QIcon pDockWidgetTitleBar::icon() const { QIcon icon = mDock->toggleViewAction()->icon(); if ( icon.isNull() ) { icon = mDock->windowIcon(); } if ( icon.isNull() ) { icon = toggleViewAction()->icon(); } if ( icon.isNull() ) { icon = windowIcon(); } if ( icon.isNull() ) { icon = window()->windowIcon(); } return icon; }
ViewSwitcherDockWidget::ViewSwitcherDockWidget(const QString & title, QWidget * parent) : FDockWidget(title, parent) { m_bitmap = NULL; m_viewSwitcher = NULL; m_within = true; bool floatFlag = true; QPoint initial(10,50); #ifdef Q_WS_MAC initial.setY(34); #else #ifdef Q_WS_X11 floatFlag = false; initial.setY(60); #else #ifdef Q_WS_WIN OSVERSIONINFO OSversion; OSversion.dwOSVersionInfoSize=sizeof(OSVERSIONINFO); ::GetVersionEx(&OSversion); //DebugDialog::debug(QString("windows os version %1 %2").arg(OSversion.dwMajorVersion).arg(OSversion.dwMinorVersion)); if (OSversion.dwMajorVersion > 5) { // vista and win 7 major version is 6 initial.setX(12); initial.setY(60); } #endif #endif #endif setFloating(floatFlag); m_offsetFromParent.setX(initial.x()); m_offsetFromParent.setY(initial.y()); // connect last so they doesn't trigger during construction connect(this, SIGNAL(topLevelChanged(bool)), this, SLOT(topLevelChangedSlot(bool))); connect(toggleViewAction(), SIGNAL(triggered()), this, SLOT(savePreference()), Qt::DirectConnection); }
FiltersDock::FiltersDock(MetadataModel* metadataModel, AttachedFiltersModel* attachedModel, QWidget *parent) : QDockWidget(tr("Filters"), parent), m_qview(QmlUtilities::sharedEngine(), this) { LOG_DEBUG() << "begin"; setObjectName("FiltersDock"); QIcon filterIcon = QIcon::fromTheme("view-filter", QIcon(":/icons/oxygen/32x32/actions/view-filter.png")); setWindowIcon(filterIcon); toggleViewAction()->setIcon(windowIcon()); setMinimumWidth(300); m_qview.setFocusPolicy(Qt::StrongFocus); setWidget(&m_qview); QmlUtilities::setCommonProperties(m_qview.rootContext()); m_qview.rootContext()->setContextProperty("view", new QmlView(m_qview.quickWindow())); m_qview.rootContext()->setContextProperty("metadatamodel", metadataModel); m_qview.rootContext()->setContextProperty("attachedfiltersmodel", attachedModel); setCurrentFilter(0, 0, -1); connect(m_qview.quickWindow(), SIGNAL(sceneGraphInitialized()), SLOT(resetQview())); LOG_DEBUG() << "end"; }
TimelineDock::TimelineDock(QWidget *parent) : QDockWidget(parent), ui(new Ui::TimelineDock), m_quickView(this), m_position(-1) { qDebug() << "begin"; ui->setupUi(this); toggleViewAction()->setIcon(windowIcon()); qmlRegisterType<MultitrackModel>("Shotcut.Models", 1, 0, "MultitrackModel"); QDir importPath = QmlUtilities::qmlDir(); importPath.cd("modules"); m_quickView.engine()->addImportPath(importPath.path()); m_quickView.engine()->addImageProvider(QString("thumbnail"), new ThumbnailProvider); QmlUtilities::setCommonProperties(&m_quickView); m_quickView.rootContext()->setContextProperty("timeline", this); m_quickView.rootContext()->setContextProperty("multitrack", &m_model); m_quickView.setResizeMode(QQuickView::SizeRootObjectToView); m_quickView.setColor(palette().window().color()); connect(&m_model, &MultitrackModel::modified, this, &TimelineDock::clearSelectionIfInvalid); QWidget* container = QWidget::createWindowContainer(&m_quickView, this); container->setFocusPolicy(Qt::TabFocus); delete ui->scrollAreaWidgetContents; ui->scrollArea->setWidget(container); connect(MLT.videoWidget(), SIGNAL(frameDisplayed(const SharedFrame&)), this, SLOT(onShowFrame(const SharedFrame&))); #ifdef Q_OS_WIN onVisibilityChanged(true); #else connect(this, &QDockWidget::visibilityChanged, this, &TimelineDock::onVisibilityChanged); #endif qDebug() << "end"; }
ToolBar::ToolBar(const QString &title, QWidget *parent) : QToolBar(parent), spinbox(0), spinboxAction(0) { tip = 0; setWindowTitle(title); setObjectName(title); setIconSize(QSize(32, 32)); QColor bg(palette().background().color()); menu = new QMenu("One", this); menu->setIcon(genIcon(iconSize(), 1, Qt::black)); menu->addAction(genIcon(iconSize(), "A", Qt::blue), "A"); menu->addAction(genIcon(iconSize(), "B", Qt::blue), "B"); menu->addAction(genIcon(iconSize(), "C", Qt::blue), "C"); addAction(menu->menuAction()); QAction *two = addAction(genIcon(iconSize(), 2, Qt::white), "Two"); QFont boldFont; boldFont.setBold(true); two->setFont(boldFont); addAction(genIcon(iconSize(), 3, Qt::red), "Three"); addAction(genIcon(iconSize(), 4, Qt::green), "Four"); addAction(genIcon(iconSize(), 5, Qt::blue), "Five"); addAction(genIcon(iconSize(), 6, Qt::yellow), "Six"); orderAction = new QAction(this); orderAction->setText(tr("Order Items in Tool Bar")); connect(orderAction, SIGNAL(triggered()), SLOT(order())); randomizeAction = new QAction(this); randomizeAction->setText(tr("Randomize Items in Tool Bar")); connect(randomizeAction, SIGNAL(triggered()), SLOT(randomize())); addSpinBoxAction = new QAction(this); addSpinBoxAction->setText(tr("Add Spin Box")); connect(addSpinBoxAction, SIGNAL(triggered()), SLOT(addSpinBox())); removeSpinBoxAction = new QAction(this); removeSpinBoxAction->setText(tr("Remove Spin Box")); removeSpinBoxAction->setEnabled(false); connect(removeSpinBoxAction, SIGNAL(triggered()), SLOT(removeSpinBox())); movableAction = new QAction(tr("Movable"), this); movableAction->setCheckable(true); connect(movableAction, SIGNAL(triggered(bool)), SLOT(changeMovable(bool))); allowedAreasActions = new QActionGroup(this); allowedAreasActions->setExclusive(false); allowLeftAction = new QAction(tr("Allow on Left"), this); allowLeftAction->setCheckable(true); connect(allowLeftAction, SIGNAL(triggered(bool)), SLOT(allowLeft(bool))); allowRightAction = new QAction(tr("Allow on Right"), this); allowRightAction->setCheckable(true); connect(allowRightAction, SIGNAL(triggered(bool)), SLOT(allowRight(bool))); allowTopAction = new QAction(tr("Allow on Top"), this); allowTopAction->setCheckable(true); connect(allowTopAction, SIGNAL(triggered(bool)), SLOT(allowTop(bool))); allowBottomAction = new QAction(tr("Allow on Bottom"), this); allowBottomAction->setCheckable(true); connect(allowBottomAction, SIGNAL(triggered(bool)), SLOT(allowBottom(bool))); allowedAreasActions->addAction(allowLeftAction); allowedAreasActions->addAction(allowRightAction); allowedAreasActions->addAction(allowTopAction); allowedAreasActions->addAction(allowBottomAction); areaActions = new QActionGroup(this); areaActions->setExclusive(true); leftAction = new QAction(tr("Place on Left") , this); leftAction->setCheckable(true); connect(leftAction, SIGNAL(triggered(bool)), SLOT(placeLeft(bool))); rightAction = new QAction(tr("Place on Right") , this); rightAction->setCheckable(true); connect(rightAction, SIGNAL(triggered(bool)), SLOT(placeRight(bool))); topAction = new QAction(tr("Place on Top") , this); topAction->setCheckable(true); connect(topAction, SIGNAL(triggered(bool)), SLOT(placeTop(bool))); bottomAction = new QAction(tr("Place on Bottom") , this); bottomAction->setCheckable(true); connect(bottomAction, SIGNAL(triggered(bool)), SLOT(placeBottom(bool))); areaActions->addAction(leftAction); areaActions->addAction(rightAction); areaActions->addAction(topAction); areaActions->addAction(bottomAction); toolBarBreakAction = new QAction(tr("Insert break"), this); connect(toolBarBreakAction, SIGNAL(triggered(bool)), this, SLOT(insertToolBarBreak())); connect(movableAction, SIGNAL(triggered(bool)), areaActions, SLOT(setEnabled(bool))); connect(movableAction, SIGNAL(triggered(bool)), allowedAreasActions, SLOT(setEnabled(bool))); menu = new QMenu(title, this); menu->addAction(toggleViewAction()); menu->addSeparator(); menu->addAction(orderAction); menu->addAction(randomizeAction); menu->addSeparator(); menu->addAction(addSpinBoxAction); menu->addAction(removeSpinBoxAction); menu->addSeparator(); menu->addAction(movableAction); menu->addSeparator(); menu->addActions(allowedAreasActions->actions()); menu->addSeparator(); menu->addActions(areaActions->actions()); menu->addSeparator(); menu->addAction(toolBarBreakAction); connect(menu, SIGNAL(aboutToShow()), this, SLOT(updateMenu())); randomize(); }
GMainWindow::GMainWindow() : config(new Config()), emu_thread(nullptr) { Pica::g_debug_context = Pica::DebugContext::Construct(); ui.setupUi(this); statusBar()->hide(); render_window = new GRenderWindow(this, emu_thread.get()); render_window->hide(); game_list = new GameList(); ui.horizontalLayout->addWidget(game_list); profilerWidget = new ProfilerWidget(this); addDockWidget(Qt::BottomDockWidgetArea, profilerWidget); profilerWidget->hide(); #if MICROPROFILE_ENABLED microProfileDialog = new MicroProfileDialog(this); microProfileDialog->hide(); #endif disasmWidget = new DisassemblerWidget(this, emu_thread.get()); addDockWidget(Qt::BottomDockWidgetArea, disasmWidget); disasmWidget->hide(); registersWidget = new RegistersWidget(this); addDockWidget(Qt::RightDockWidgetArea, registersWidget); registersWidget->hide(); callstackWidget = new CallstackWidget(this); addDockWidget(Qt::RightDockWidgetArea, callstackWidget); callstackWidget->hide(); graphicsWidget = new GPUCommandStreamWidget(this); addDockWidget(Qt::RightDockWidgetArea, graphicsWidget); graphicsWidget ->hide(); graphicsCommandsWidget = new GPUCommandListWidget(this); addDockWidget(Qt::RightDockWidgetArea, graphicsCommandsWidget); graphicsCommandsWidget->hide(); auto graphicsBreakpointsWidget = new GraphicsBreakPointsWidget(Pica::g_debug_context, this); addDockWidget(Qt::RightDockWidgetArea, graphicsBreakpointsWidget); graphicsBreakpointsWidget->hide(); auto graphicsVertexShaderWidget = new GraphicsVertexShaderWidget(Pica::g_debug_context, this); addDockWidget(Qt::RightDockWidgetArea, graphicsVertexShaderWidget); graphicsVertexShaderWidget->hide(); auto graphicsTracingWidget = new GraphicsTracingWidget(Pica::g_debug_context, this); addDockWidget(Qt::RightDockWidgetArea, graphicsTracingWidget); graphicsTracingWidget->hide(); auto graphicsSurfaceViewerAction = new QAction(tr("Create Pica surface viewer"), this); connect(graphicsSurfaceViewerAction, SIGNAL(triggered()), this, SLOT(OnCreateGraphicsSurfaceViewer())); QMenu* debug_menu = ui.menu_View->addMenu(tr("Debugging")); debug_menu->addAction(graphicsSurfaceViewerAction); debug_menu->addSeparator(); debug_menu->addAction(profilerWidget->toggleViewAction()); #if MICROPROFILE_ENABLED debug_menu->addAction(microProfileDialog->toggleViewAction()); #endif debug_menu->addAction(disasmWidget->toggleViewAction()); debug_menu->addAction(registersWidget->toggleViewAction()); debug_menu->addAction(callstackWidget->toggleViewAction()); debug_menu->addAction(graphicsWidget->toggleViewAction()); debug_menu->addAction(graphicsCommandsWidget->toggleViewAction()); debug_menu->addAction(graphicsBreakpointsWidget->toggleViewAction()); debug_menu->addAction(graphicsVertexShaderWidget->toggleViewAction()); debug_menu->addAction(graphicsTracingWidget->toggleViewAction()); // Set default UI state // geometry: 55% of the window contents are in the upper screen half, 45% in the lower half QDesktopWidget* desktop = ((QApplication*)QApplication::instance())->desktop(); QRect screenRect = desktop->screenGeometry(this); int x, y, w, h; w = screenRect.width() * 2 / 3; h = screenRect.height() / 2; x = (screenRect.x() + screenRect.width()) / 2 - w / 2; y = (screenRect.y() + screenRect.height()) / 2 - h * 55 / 100; setGeometry(x, y, w, h); // Restore UI state restoreGeometry(UISettings::values.geometry); restoreState(UISettings::values.state); render_window->restoreGeometry(UISettings::values.renderwindow_geometry); #if MICROPROFILE_ENABLED microProfileDialog->restoreGeometry(UISettings::values.microprofile_geometry); microProfileDialog->setVisible(UISettings::values.microprofile_visible); #endif game_list->LoadInterfaceLayout(); ui.action_Single_Window_Mode->setChecked(UISettings::values.single_window_mode); ToggleWindowMode(); ui.actionDisplay_widget_title_bars->setChecked(UISettings::values.display_titlebar); OnDisplayTitleBars(ui.actionDisplay_widget_title_bars->isChecked()); // Prepare actions for recent files for (int i = 0; i < max_recent_files_item; ++i) { actions_recent_files[i] = new QAction(this); actions_recent_files[i]->setVisible(false); connect(actions_recent_files[i], SIGNAL(triggered()), this, SLOT(OnMenuRecentFile())); ui.menu_recent_files->addAction(actions_recent_files[i]); } UpdateRecentFiles(); // Setup connections connect(game_list, SIGNAL(GameChosen(QString)), this, SLOT(OnGameListLoadFile(QString)), Qt::DirectConnection); connect(ui.action_Configure, SIGNAL(triggered()), this, SLOT(OnConfigure())); connect(ui.action_Load_File, SIGNAL(triggered()), this, SLOT(OnMenuLoadFile()),Qt::DirectConnection); connect(ui.action_Load_Symbol_Map, SIGNAL(triggered()), this, SLOT(OnMenuLoadSymbolMap())); connect(ui.action_Select_Game_List_Root, SIGNAL(triggered()), this, SLOT(OnMenuSelectGameListRoot())); connect(ui.action_Start, SIGNAL(triggered()), this, SLOT(OnStartGame())); connect(ui.action_Pause, SIGNAL(triggered()), this, SLOT(OnPauseGame())); connect(ui.action_Stop, SIGNAL(triggered()), this, SLOT(OnStopGame())); connect(ui.action_Single_Window_Mode, SIGNAL(triggered(bool)), this, SLOT(ToggleWindowMode())); connect(this, SIGNAL(EmulationStarting(EmuThread*)), disasmWidget, SLOT(OnEmulationStarting(EmuThread*))); connect(this, SIGNAL(EmulationStopping()), disasmWidget, SLOT(OnEmulationStopping())); connect(this, SIGNAL(EmulationStarting(EmuThread*)), registersWidget, SLOT(OnEmulationStarting(EmuThread*))); connect(this, SIGNAL(EmulationStopping()), registersWidget, SLOT(OnEmulationStopping())); connect(this, SIGNAL(EmulationStarting(EmuThread*)), render_window, SLOT(OnEmulationStarting(EmuThread*))); connect(this, SIGNAL(EmulationStopping()), render_window, SLOT(OnEmulationStopping())); connect(this, SIGNAL(EmulationStarting(EmuThread*)), graphicsTracingWidget, SLOT(OnEmulationStarting(EmuThread*))); connect(this, SIGNAL(EmulationStopping()), graphicsTracingWidget, SLOT(OnEmulationStopping())); // Setup hotkeys RegisterHotkey("Main Window", "Load File", QKeySequence::Open); RegisterHotkey("Main Window", "Start Emulation"); LoadHotkeys(); connect(GetHotkey("Main Window", "Load File", this), SIGNAL(activated()), this, SLOT(OnMenuLoadFile())); connect(GetHotkey("Main Window", "Start Emulation", this), SIGNAL(activated()), this, SLOT(OnStartGame())); std::string window_title = Common::StringFromFormat("Citra | %s-%s", Common::g_scm_branch, Common::g_scm_desc); setWindowTitle(window_title.c_str()); show(); game_list->PopulateAsync(UISettings::values.gamedir, UISettings::values.gamedir_deepscan); QStringList args = QApplication::arguments(); if (args.length() >= 2) { BootGame(args[1].toStdString()); } }
GMainWindow::GMainWindow() { LogManager::Init(); Pica::g_debug_context = Pica::DebugContext::Construct(); Config config; if (!Settings::values.enable_log) LogManager::Shutdown(); ui.setupUi(this); statusBar()->hide(); render_window = new GRenderWindow; render_window->hide(); disasmWidget = new DisassemblerWidget(this, render_window->GetEmuThread()); addDockWidget(Qt::BottomDockWidgetArea, disasmWidget); disasmWidget->hide(); registersWidget = new RegistersWidget(this); addDockWidget(Qt::RightDockWidgetArea, registersWidget); registersWidget->hide(); callstackWidget = new CallstackWidget(this); addDockWidget(Qt::RightDockWidgetArea, callstackWidget); callstackWidget->hide(); graphicsWidget = new GPUCommandStreamWidget(this); addDockWidget(Qt::RightDockWidgetArea, graphicsWidget); graphicsWidget ->hide(); graphicsCommandsWidget = new GPUCommandListWidget(this); addDockWidget(Qt::RightDockWidgetArea, graphicsCommandsWidget); graphicsCommandsWidget->hide(); auto graphicsBreakpointsWidget = new GraphicsBreakPointsWidget(Pica::g_debug_context, this); addDockWidget(Qt::RightDockWidgetArea, graphicsBreakpointsWidget); graphicsBreakpointsWidget->hide(); auto graphicsFramebufferWidget = new GraphicsFramebufferWidget(Pica::g_debug_context, this); addDockWidget(Qt::RightDockWidgetArea, graphicsFramebufferWidget); graphicsFramebufferWidget->hide(); QMenu* debug_menu = ui.menu_View->addMenu(tr("Debugging")); debug_menu->addAction(disasmWidget->toggleViewAction()); debug_menu->addAction(registersWidget->toggleViewAction()); debug_menu->addAction(callstackWidget->toggleViewAction()); debug_menu->addAction(graphicsWidget->toggleViewAction()); debug_menu->addAction(graphicsCommandsWidget->toggleViewAction()); debug_menu->addAction(graphicsBreakpointsWidget->toggleViewAction()); debug_menu->addAction(graphicsFramebufferWidget->toggleViewAction()); // Set default UI state // geometry: 55% of the window contents are in the upper screen half, 45% in the lower half QDesktopWidget* desktop = ((QApplication*)QApplication::instance())->desktop(); QRect screenRect = desktop->screenGeometry(this); int x, y, w, h; w = screenRect.width() * 2 / 3; h = screenRect.height() / 2; x = (screenRect.x() + screenRect.width()) / 2 - w / 2; y = (screenRect.y() + screenRect.height()) / 2 - h * 55 / 100; setGeometry(x, y, w, h); // Restore UI state QSettings settings(QSettings::IniFormat, QSettings::UserScope, "Citra team", "Citra"); restoreGeometry(settings.value("geometry").toByteArray()); restoreState(settings.value("state").toByteArray()); render_window->restoreGeometry(settings.value("geometryRenderWindow").toByteArray()); ui.action_Popout_Window_Mode->setChecked(settings.value("popoutWindowMode", true).toBool()); ToggleWindowMode(); // Setup connections connect(ui.action_Load_File, SIGNAL(triggered()), this, SLOT(OnMenuLoadFile())); connect(ui.action_Load_Symbol_Map, SIGNAL(triggered()), this, SLOT(OnMenuLoadSymbolMap())); connect(ui.action_Start, SIGNAL(triggered()), this, SLOT(OnStartGame())); connect(ui.action_Pause, SIGNAL(triggered()), this, SLOT(OnPauseGame())); connect(ui.action_Stop, SIGNAL(triggered()), this, SLOT(OnStopGame())); connect(ui.action_Popout_Window_Mode, SIGNAL(triggered(bool)), this, SLOT(ToggleWindowMode())); connect(ui.action_Hotkeys, SIGNAL(triggered()), this, SLOT(OnOpenHotkeysDialog())); // BlockingQueuedConnection is important here, it makes sure we've finished refreshing our views before the CPU continues connect(&render_window->GetEmuThread(), SIGNAL(CPUStepped()), disasmWidget, SLOT(OnCPUStepped()), Qt::BlockingQueuedConnection); connect(&render_window->GetEmuThread(), SIGNAL(CPUStepped()), registersWidget, SLOT(OnCPUStepped()), Qt::BlockingQueuedConnection); connect(&render_window->GetEmuThread(), SIGNAL(CPUStepped()), callstackWidget, SLOT(OnCPUStepped()), Qt::BlockingQueuedConnection); // Setup hotkeys RegisterHotkey("Main Window", "Load File", QKeySequence::Open); RegisterHotkey("Main Window", "Start Emulation"); LoadHotkeys(settings); connect(GetHotkey("Main Window", "Load File", this), SIGNAL(activated()), this, SLOT(OnMenuLoadFile())); connect(GetHotkey("Main Window", "Start Emulation", this), SIGNAL(activated()), this, SLOT(OnStartGame())); std::string window_title = Common::StringFromFormat("Citra | %s-%s", Common::g_scm_branch, Common::g_scm_desc); setWindowTitle(window_title.c_str()); show(); QStringList args = QApplication::arguments(); if (args.length() >= 2) { BootGame(args[1].toStdString()); } }
int main(int argc, char **argv) { QApplication app(argc, argv); App::initializeDependencies(); auto aboutData = App::getAboutData(); QCommandLineParser parser; KAboutData::setApplicationData(aboutData); parser.addVersionOption(); parser.addHelpOption(); aboutData.setupCommandLine(&parser); parser.process(app); aboutData.processCommandLine(&parser); KSharedConfig::Ptr config = KSharedConfig::openConfig(QStringLiteral("zanshin-migratorrc")); KConfigGroup group = config->group("Migrations"); if (!group.readEntry("Migrated021Projects", false)) { std::cerr << "Migrating data from zanshin 0.2, please wait..." << std::endl; QProcess proc; proc.start(QStringLiteral("zanshin-migrator")); proc.waitForFinished(-1); if (proc.exitStatus() == QProcess::CrashExit) { std::cerr << "Migrator crashed!" << std::endl; } else if (proc.exitCode() == 0) { std::cerr << "Migration done" << std::endl; } else { std::cerr << "Migration error, code" << proc.exitCode() << std::endl; } } auto widget = new QWidget; auto components = new Widgets::ApplicationComponents(widget); components->setModel(Presentation::ApplicationModel::Ptr::create()); auto layout = new QVBoxLayout; layout->setContentsMargins(0, 0, 0, 0); layout->addWidget(components->pageView()); widget->setLayout(layout); auto sourcesDock = new QDockWidget(QObject::tr("Sources")); sourcesDock->setObjectName(QStringLiteral("sourcesDock")); sourcesDock->setWidget(components->availableSourcesView()); auto pagesDock = new QDockWidget(QObject::tr("Pages")); pagesDock->setObjectName(QStringLiteral("pagesDock")); pagesDock->setWidget(components->availablePagesView()); auto editorDock = new QDockWidget(QObject::tr("Editor")); editorDock->setObjectName(QStringLiteral("editorDock")); editorDock->setWidget(components->editorView()); auto window = new KXmlGuiWindow; window->setCentralWidget(widget); window->addDockWidget(Qt::RightDockWidgetArea, editorDock); window->addDockWidget(Qt::LeftDockWidgetArea, pagesDock); window->addDockWidget(Qt::LeftDockWidgetArea, sourcesDock); auto actions = components->globalActions(); actions.insert(QStringLiteral("dock_sources"), sourcesDock->toggleViewAction()); actions.insert(QStringLiteral("dock_pages"), pagesDock->toggleViewAction()); actions.insert(QStringLiteral("dock_editor"), editorDock->toggleViewAction()); auto ac = window->actionCollection(); ac->addAction(KStandardAction::Quit, window, SLOT(close())); for (auto it = actions.constBegin(); it != actions.constEnd(); ++it) { auto shortcut = it.value()->shortcut(); if (!shortcut.isEmpty()) { ac->setDefaultShortcut(it.value(), shortcut); } ac->addAction(it.key(), it.value()); } window->setupGUI(QSize(1024, 600), KXmlGuiWindow::ToolBar | KXmlGuiWindow::Keys | KXmlGuiWindow::Save | KXmlGuiWindow::Create); window->show(); return app.exec(); }
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), _logger(Poco::Logger::get("PothosFlow.MainWindow")), _splash(new MainSplash(this)), _settings(new MainSettings(this)), _actions(nullptr), _blockCache(nullptr), _editorTabs(nullptr), _propertiesPanel(nullptr) { globalMainWindow = this; _splash->show(); _splash->postMessage(tr("Creating main window...")); _splash->postMessage(tr("Launching scratch process...")); this->setupServer(); _splash->postMessage(tr("Loading Pothos plugins...")); Pothos::init(); this->setMinimumSize(800, 600); this->setWindowTitle("Pothos Flow"); //initialize actions and action buttons _splash->postMessage(tr("Creating actions...")); _actions = new MainActions(this); _splash->postMessage(tr("Creating toolbar...")); auto mainToolBar = new MainToolBar(this, _actions); this->addToolBar(mainToolBar); _splash->postMessage(tr("Creating menus...")); auto mainMenu = new MainMenu(this, _actions); //connect actions to the main window connect(_actions->exitAction, SIGNAL(triggered(void)), this, SLOT(close(void))); connect(_actions->showAboutAction, SIGNAL(triggered(void)), this, SLOT(handleShowAbout(void))); connect(_actions->showAboutQtAction, SIGNAL(triggered(void)), this, SLOT(handleShowAboutQt(void))); connect(_actions->showColorsDialogAction, SIGNAL(triggered(void)), this, SLOT(handleColorsDialogAction(void))); connect(_actions->fullScreenViewAction, SIGNAL(toggled(bool)), this, SLOT(handleFullScreenViewAction(bool))); connect(_actions->reloadPluginsAction, SIGNAL(triggered(bool)), this, SLOT(handleReloadPlugins(void))); //create message window dock _splash->postMessage(tr("Creating message window...")); auto messageWindowDock = new MessageWindowDock(this); this->addDockWidget(Qt::BottomDockWidgetArea, messageWindowDock); _logger.information("Welcome to Pothos v%s", Pothos::System::getLibVersion()); //create graph actions dock _splash->postMessage(tr("Creating actions dock...")); auto graphActionsDock = new GraphActionsDock(this); this->addDockWidget(Qt::BottomDockWidgetArea, graphActionsDock); //create host explorer dock _splash->postMessage(tr("Creating host explorer...")); auto hostExplorerDock = new HostExplorerDock(this); this->addDockWidget(Qt::RightDockWidgetArea, hostExplorerDock); //create affinity panel _splash->postMessage(tr("Creating affinity panel...")); auto affinityZonesDock = new AffinityZonesDock(this, hostExplorerDock); this->tabifyDockWidget(hostExplorerDock, affinityZonesDock); auto editMenu = mainMenu->editMenu; mainMenu->affinityZoneMenu = affinityZonesDock->makeMenu(editMenu); editMenu->addMenu(mainMenu->affinityZoneMenu); //block cache (make before block tree) _splash->postMessage(tr("Creating block cache...")); _blockCache = new BlockCache(this, hostExplorerDock); connect(this, &MainWindow::initDone, _blockCache, &BlockCache::update); //create topology editor tabbed widget _splash->postMessage(tr("Creating graph editor...")); _editorTabs = new GraphEditorTabs(this); this->setCentralWidget(_editorTabs); connect(this, &MainWindow::initDone, _editorTabs, &GraphEditorTabs::loadState); connect(this, &MainWindow::exitBegin, _editorTabs, &GraphEditorTabs::handleExit); //create block tree (after the block cache) _splash->postMessage(tr("Creating block tree...")); auto blockTreeDock = new BlockTreeDock(this, _blockCache, _editorTabs); connect(_actions->findAction, SIGNAL(triggered(void)), blockTreeDock, SLOT(activateFind(void))); this->tabifyDockWidget(affinityZonesDock, blockTreeDock); //create properties panel (make after block cache) _splash->postMessage(tr("Creating properties panel...")); _propertiesPanel = new PropertiesPanelDock(this); this->tabifyDockWidget(blockTreeDock, _propertiesPanel); //restore main window settings from file _splash->postMessage(tr("Restoring configuration...")); this->restoreGeometry(_settings->value("MainWindow/geometry").toByteArray()); this->restoreState(_settings->value("MainWindow/state").toByteArray()); _propertiesPanel->hide(); //hidden until used _actions->showPortNamesAction->setChecked(_settings->value("MainWindow/showPortNames", true).toBool()); _actions->eventPortsInlineAction->setChecked(_settings->value("MainWindow/eventPortsInline", true).toBool()); _actions->clickConnectModeAction->setChecked(_settings->value("MainWindow/clickConnectMode", false).toBool()); _actions->showGraphConnectionPointsAction->setChecked(_settings->value("MainWindow/showGraphConnectionPoints", false).toBool()); _actions->showGraphBoundingBoxesAction->setChecked(_settings->value("MainWindow/showGraphBoundingBoxes", false).toBool()); //finish view menu after docks and tool bars (view menu calls their toggleViewAction()) auto viewMenu = mainMenu->viewMenu; viewMenu->addAction(hostExplorerDock->toggleViewAction()); viewMenu->addAction(messageWindowDock->toggleViewAction()); viewMenu->addAction(graphActionsDock->toggleViewAction()); viewMenu->addAction(blockTreeDock->toggleViewAction()); viewMenu->addAction(affinityZonesDock->toggleViewAction()); viewMenu->addAction(mainToolBar->toggleViewAction()); //setup is complete, show the window and signal done this->show(); connect(this, &MainWindow::initDone, this, &MainWindow::handleInitDone); emit this->initDone(); }
GMainWindow::GMainWindow() : emu_thread(nullptr) { Pica::g_debug_context = Pica::DebugContext::Construct(); Config config; ui.setupUi(this); statusBar()->hide(); render_window = new GRenderWindow(this, emu_thread.get()); render_window->hide(); game_list = new GameList(); ui.horizontalLayout->addWidget(game_list); profilerWidget = new ProfilerWidget(this); addDockWidget(Qt::BottomDockWidgetArea, profilerWidget); profilerWidget->hide(); microProfileDialog = new MicroProfileDialog(this); microProfileDialog->hide(); disasmWidget = new DisassemblerWidget(this, emu_thread.get()); addDockWidget(Qt::BottomDockWidgetArea, disasmWidget); disasmWidget->hide(); registersWidget = new RegistersWidget(this); addDockWidget(Qt::RightDockWidgetArea, registersWidget); registersWidget->hide(); callstackWidget = new CallstackWidget(this); addDockWidget(Qt::RightDockWidgetArea, callstackWidget); callstackWidget->hide(); graphicsWidget = new GPUCommandStreamWidget(this); addDockWidget(Qt::RightDockWidgetArea, graphicsWidget); graphicsWidget ->hide(); graphicsCommandsWidget = new GPUCommandListWidget(this); addDockWidget(Qt::RightDockWidgetArea, graphicsCommandsWidget); graphicsCommandsWidget->hide(); auto graphicsBreakpointsWidget = new GraphicsBreakPointsWidget(Pica::g_debug_context, this); addDockWidget(Qt::RightDockWidgetArea, graphicsBreakpointsWidget); graphicsBreakpointsWidget->hide(); auto graphicsFramebufferWidget = new GraphicsFramebufferWidget(Pica::g_debug_context, this); addDockWidget(Qt::RightDockWidgetArea, graphicsFramebufferWidget); graphicsFramebufferWidget->hide(); auto graphicsVertexShaderWidget = new GraphicsVertexShaderWidget(Pica::g_debug_context, this); addDockWidget(Qt::RightDockWidgetArea, graphicsVertexShaderWidget); graphicsVertexShaderWidget->hide(); auto graphicsTracingWidget = new GraphicsTracingWidget(Pica::g_debug_context, this); addDockWidget(Qt::RightDockWidgetArea, graphicsTracingWidget); graphicsTracingWidget->hide(); QMenu* debug_menu = ui.menu_View->addMenu(tr("Debugging")); debug_menu->addAction(profilerWidget->toggleViewAction()); debug_menu->addAction(microProfileDialog->toggleViewAction()); debug_menu->addAction(disasmWidget->toggleViewAction()); debug_menu->addAction(registersWidget->toggleViewAction()); debug_menu->addAction(callstackWidget->toggleViewAction()); debug_menu->addAction(graphicsWidget->toggleViewAction()); debug_menu->addAction(graphicsCommandsWidget->toggleViewAction()); debug_menu->addAction(graphicsBreakpointsWidget->toggleViewAction()); debug_menu->addAction(graphicsFramebufferWidget->toggleViewAction()); debug_menu->addAction(graphicsVertexShaderWidget->toggleViewAction()); debug_menu->addAction(graphicsTracingWidget->toggleViewAction()); // Set default UI state // geometry: 55% of the window contents are in the upper screen half, 45% in the lower half QDesktopWidget* desktop = ((QApplication*)QApplication::instance())->desktop(); QRect screenRect = desktop->screenGeometry(this); int x, y, w, h; w = screenRect.width() * 2 / 3; h = screenRect.height() / 2; x = (screenRect.x() + screenRect.width()) / 2 - w / 2; y = (screenRect.y() + screenRect.height()) / 2 - h * 55 / 100; setGeometry(x, y, w, h); // Restore UI state QSettings settings; settings.beginGroup("UILayout"); restoreGeometry(settings.value("geometry").toByteArray()); restoreState(settings.value("state").toByteArray()); render_window->restoreGeometry(settings.value("geometryRenderWindow").toByteArray()); microProfileDialog->restoreGeometry(settings.value("microProfileDialogGeometry").toByteArray()); microProfileDialog->setVisible(settings.value("microProfileDialogVisible").toBool()); settings.endGroup(); game_list->LoadInterfaceLayout(settings); ui.action_Use_Hardware_Renderer->setChecked(Settings::values.use_hw_renderer); SetHardwareRendererEnabled(ui.action_Use_Hardware_Renderer->isChecked()); ui.action_Use_Shader_JIT->setChecked(Settings::values.use_shader_jit); SetShaderJITEnabled(ui.action_Use_Shader_JIT->isChecked()); ui.action_Single_Window_Mode->setChecked(settings.value("singleWindowMode", true).toBool()); ToggleWindowMode(); ui.actionDisplay_widget_title_bars->setChecked(settings.value("displayTitleBars", true).toBool()); OnDisplayTitleBars(ui.actionDisplay_widget_title_bars->isChecked()); // Prepare actions for recent files for (int i = 0; i < max_recent_files_item; ++i) { actions_recent_files[i] = new QAction(this); actions_recent_files[i]->setVisible(false); connect(actions_recent_files[i], SIGNAL(triggered()), this, SLOT(OnMenuRecentFile())); ui.menu_recent_files->addAction(actions_recent_files[i]); } UpdateRecentFiles(); // Setup connections connect(game_list, SIGNAL(GameChosen(QString)), this, SLOT(OnGameListLoadFile(QString))); connect(ui.action_Load_File, SIGNAL(triggered()), this, SLOT(OnMenuLoadFile())); connect(ui.action_Load_Symbol_Map, SIGNAL(triggered()), this, SLOT(OnMenuLoadSymbolMap())); connect(ui.action_Select_Game_List_Root, SIGNAL(triggered()), this, SLOT(OnMenuSelectGameListRoot())); connect(ui.action_Start, SIGNAL(triggered()), this, SLOT(OnStartGame())); connect(ui.action_Pause, SIGNAL(triggered()), this, SLOT(OnPauseGame())); connect(ui.action_Stop, SIGNAL(triggered()), this, SLOT(OnStopGame())); connect(ui.action_Use_Hardware_Renderer, SIGNAL(triggered(bool)), this, SLOT(SetHardwareRendererEnabled(bool))); connect(ui.action_Use_Shader_JIT, SIGNAL(triggered(bool)), this, SLOT(SetShaderJITEnabled(bool))); connect(ui.action_Single_Window_Mode, SIGNAL(triggered(bool)), this, SLOT(ToggleWindowMode())); connect(ui.action_Hotkeys, SIGNAL(triggered()), this, SLOT(OnOpenHotkeysDialog())); connect(this, SIGNAL(EmulationStarting(EmuThread*)), disasmWidget, SLOT(OnEmulationStarting(EmuThread*))); connect(this, SIGNAL(EmulationStopping()), disasmWidget, SLOT(OnEmulationStopping())); connect(this, SIGNAL(EmulationStarting(EmuThread*)), registersWidget, SLOT(OnEmulationStarting(EmuThread*))); connect(this, SIGNAL(EmulationStopping()), registersWidget, SLOT(OnEmulationStopping())); connect(this, SIGNAL(EmulationStarting(EmuThread*)), render_window, SLOT(OnEmulationStarting(EmuThread*))); connect(this, SIGNAL(EmulationStopping()), render_window, SLOT(OnEmulationStopping())); connect(this, SIGNAL(EmulationStarting(EmuThread*)), graphicsTracingWidget, SLOT(OnEmulationStarting(EmuThread*))); connect(this, SIGNAL(EmulationStopping()), graphicsTracingWidget, SLOT(OnEmulationStopping())); // Setup hotkeys RegisterHotkey("Main Window", "Load File", QKeySequence::Open); RegisterHotkey("Main Window", "Start Emulation"); LoadHotkeys(settings); connect(GetHotkey("Main Window", "Load File", this), SIGNAL(activated()), this, SLOT(OnMenuLoadFile())); connect(GetHotkey("Main Window", "Start Emulation", this), SIGNAL(activated()), this, SLOT(OnStartGame())); std::string window_title = Common::StringFromFormat("Citra | %s-%s", Common::g_scm_branch, Common::g_scm_desc); setWindowTitle(window_title.c_str()); show(); game_list->PopulateAsync(settings.value("gameListRootDir").toString(), settings.value("gameListDeepScan").toBool()); QStringList args = QApplication::arguments(); if (args.length() >= 2) { BootGame(args[1].toStdString()); } }
if ( mComposition->undoStack() ) { connect( mComposition->undoStack(), SIGNAL( canUndoChanged( bool ) ), mActionUndo, SLOT( setEnabled( bool ) ) ); connect( mComposition->undoStack(), SIGNAL( canRedoChanged( bool ) ), mActionRedo, SLOT( setEnabled( bool ) ) ); } connectSlots(); mComposition->setParent( mView ); mView->setComposition( mComposition ); setTabPosition( Qt::AllDockWidgetAreas, QTabWidget::North ); mGeneralDock = new QDockWidget( tr( "Composition" ), this ); mGeneralDock->setObjectName( "CompositionDock" ); mPanelMenu->addAction( mGeneralDock->toggleViewAction() ); mItemDock = new QDockWidget( tr( "Item Properties" ), this ); mItemDock->setObjectName( "ItemDock" ); mPanelMenu->addAction( mItemDock->toggleViewAction() ); mUndoDock = new QDockWidget( tr( "Command history" ), this ); mUndoDock->setObjectName( "CommandDock" ); mPanelMenu->addAction( mUndoDock->toggleViewAction() ); mGeneralDock->setFeatures( QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetClosable ); mItemDock->setFeatures( QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetClosable ); mUndoDock->setFeatures( QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetClosable ); QgsCompositionWidget* compositionWidget = new QgsCompositionWidget( mGeneralDock, mComposition ); connect( mComposition, SIGNAL( paperSizeChanged() ), compositionWidget, SLOT( displayCompositionWidthHeight() ) ); mGeneralDock->setWidget( compositionWidget );
GMainWindow::GMainWindow() : emu_thread(nullptr) { Pica::g_debug_context = Pica::DebugContext::Construct(); Config config; ui.setupUi(this); statusBar()->hide(); render_window = new GRenderWindow(this, emu_thread.get()); render_window->hide(); profilerWidget = new ProfilerWidget(this); addDockWidget(Qt::BottomDockWidgetArea, profilerWidget); profilerWidget->hide(); disasmWidget = new DisassemblerWidget(this, emu_thread.get()); addDockWidget(Qt::BottomDockWidgetArea, disasmWidget); disasmWidget->hide(); registersWidget = new RegistersWidget(this); addDockWidget(Qt::RightDockWidgetArea, registersWidget); registersWidget->hide(); callstackWidget = new CallstackWidget(this); addDockWidget(Qt::RightDockWidgetArea, callstackWidget); callstackWidget->hide(); graphicsWidget = new GPUCommandStreamWidget(this); addDockWidget(Qt::RightDockWidgetArea, graphicsWidget); graphicsWidget ->hide(); graphicsCommandsWidget = new GPUCommandListWidget(this); addDockWidget(Qt::RightDockWidgetArea, graphicsCommandsWidget); graphicsCommandsWidget->hide(); auto graphicsBreakpointsWidget = new GraphicsBreakPointsWidget(Pica::g_debug_context, this); addDockWidget(Qt::RightDockWidgetArea, graphicsBreakpointsWidget); graphicsBreakpointsWidget->hide(); auto graphicsFramebufferWidget = new GraphicsFramebufferWidget(Pica::g_debug_context, this); addDockWidget(Qt::RightDockWidgetArea, graphicsFramebufferWidget); graphicsFramebufferWidget->hide(); auto graphicsVertexShaderWidget = new GraphicsVertexShaderWidget(Pica::g_debug_context, this); addDockWidget(Qt::RightDockWidgetArea, graphicsVertexShaderWidget); graphicsVertexShaderWidget->hide(); QMenu* debug_menu = ui.menu_View->addMenu(tr("Debugging")); debug_menu->addAction(profilerWidget->toggleViewAction()); debug_menu->addAction(disasmWidget->toggleViewAction()); debug_menu->addAction(registersWidget->toggleViewAction()); debug_menu->addAction(callstackWidget->toggleViewAction()); debug_menu->addAction(graphicsWidget->toggleViewAction()); debug_menu->addAction(graphicsCommandsWidget->toggleViewAction()); debug_menu->addAction(graphicsBreakpointsWidget->toggleViewAction()); debug_menu->addAction(graphicsFramebufferWidget->toggleViewAction()); debug_menu->addAction(graphicsVertexShaderWidget->toggleViewAction()); // Set default UI state // geometry: 55% of the window contents are in the upper screen half, 45% in the lower half QDesktopWidget* desktop = ((QApplication*)QApplication::instance())->desktop(); QRect screenRect = desktop->screenGeometry(this); int x, y, w, h; w = screenRect.width() * 2 / 3; h = screenRect.height() / 2; x = (screenRect.x() + screenRect.width()) / 2 - w / 2; y = (screenRect.y() + screenRect.height()) / 2 - h * 55 / 100; setGeometry(x, y, w, h); // Restore UI state QSettings settings(QSettings::IniFormat, QSettings::UserScope, "Citra team", "Citra"); restoreGeometry(settings.value("geometry").toByteArray()); restoreState(settings.value("state").toByteArray()); render_window->restoreGeometry(settings.value("geometryRenderWindow").toByteArray()); ui.action_Single_Window_Mode->setChecked(settings.value("singleWindowMode", true).toBool()); ToggleWindowMode(); ui.actionDisplay_widget_title_bars->setChecked(settings.value("displayTitleBars", true).toBool()); OnDisplayTitleBars(ui.actionDisplay_widget_title_bars->isChecked()); // Setup connections connect(ui.action_Load_File, SIGNAL(triggered()), this, SLOT(OnMenuLoadFile())); connect(ui.action_Load_Symbol_Map, SIGNAL(triggered()), this, SLOT(OnMenuLoadSymbolMap())); connect(ui.action_Start, SIGNAL(triggered()), this, SLOT(OnStartGame())); connect(ui.action_Pause, SIGNAL(triggered()), this, SLOT(OnPauseGame())); connect(ui.action_Stop, SIGNAL(triggered()), this, SLOT(OnStopGame())); connect(ui.action_Single_Window_Mode, SIGNAL(triggered(bool)), this, SLOT(ToggleWindowMode())); connect(ui.action_Hotkeys, SIGNAL(triggered()), this, SLOT(OnOpenHotkeysDialog())); connect(this, SIGNAL(EmulationStarting(EmuThread*)), disasmWidget, SLOT(OnEmulationStarting(EmuThread*))); connect(this, SIGNAL(EmulationStopping()), disasmWidget, SLOT(OnEmulationStopping())); connect(this, SIGNAL(EmulationStarting(EmuThread*)), registersWidget, SLOT(OnEmulationStarting(EmuThread*))); connect(this, SIGNAL(EmulationStopping()), registersWidget, SLOT(OnEmulationStopping())); connect(this, SIGNAL(EmulationStarting(EmuThread*)), render_window, SLOT(OnEmulationStarting(EmuThread*))); connect(this, SIGNAL(EmulationStopping()), render_window, SLOT(OnEmulationStopping())); // Setup hotkeys RegisterHotkey("Main Window", "Load File", QKeySequence::Open); RegisterHotkey("Main Window", "Start Emulation"); LoadHotkeys(settings); connect(GetHotkey("Main Window", "Load File", this), SIGNAL(activated()), this, SLOT(OnMenuLoadFile())); connect(GetHotkey("Main Window", "Start Emulation", this), SIGNAL(activated()), this, SLOT(OnStartGame())); std::string window_title = Common::StringFromFormat("Citra | %s-%s", Common::g_scm_branch, Common::g_scm_desc); setWindowTitle(window_title.c_str()); show(); QStringList args = QApplication::arguments(); if (args.length() >= 2) { BootGame(args[1].toStdString()); } }