瀏覽代碼

Merge pull request #1454 from Andersama/dockable-stats

UI: Make stats dockable
Jim 7 年之前
父節點
當前提交
e299946b41
共有 4 個文件被更改,包括 48 次插入11 次删除
  1. 27 0
      UI/forms/OBSBasic.ui
  2. 10 1
      UI/window-basic-main.cpp
  3. 10 9
      UI/window-basic-stats.cpp
  4. 1 1
      UI/window-basic-stats.hpp

+ 27 - 0
UI/forms/OBSBasic.ui

@@ -293,6 +293,7 @@
      <addaction name="toggleMixer"/>
      <addaction name="toggleTransitions"/>
      <addaction name="toggleControls"/>
+     <addaction name="toggleStats"/>
     </widget>
     <action name="actionFullscreenInterface">
      <property name="text">
@@ -1098,6 +1099,21 @@
     </layout>
    </widget>
   </widget>
+  <widget class="QDockWidget" name="statsDock">
+   <property name="minimumSize">
+    <size>
+     <width>168</width>
+     <height>103</height>
+    </size>
+   </property>
+   <property name="windowTitle">
+    <string>Basic.Stats</string>
+   </property>
+   <attribute name="dockWidgetArea">
+    <number>2</number>
+   </attribute>
+   <widget class="QWidget" name="dockWidgetContents"/>
+  </widget>
   <action name="actionAddScene">
    <property name="icon">
     <iconset resource="obs.qrc">
@@ -1656,6 +1672,17 @@
     <string>Basic.MainMenu.Help.Discord</string>
    </property>
   </action>
+  <action name="toggleStats">
+   <property name="checkable">
+    <bool>true</bool>
+   </property>
+   <property name="checked">
+    <bool>true</bool>
+   </property>
+   <property name="text">
+    <string>Basic.Stats</string>
+   </property>
+  </action>
  </widget>
  <customwidgets>
   <customwidget>

+ 10 - 1
UI/window-basic-main.cpp

@@ -306,6 +306,7 @@ OBSBasic::OBSBasic(QWidget *parent)
 	assignDockToggle(ui->mixerDock, ui->toggleMixer);
 	assignDockToggle(ui->transitionsDock, ui->toggleTransitions);
 	assignDockToggle(ui->controlsDock, ui->toggleControls);
+	assignDockToggle(ui->statsDock, ui->toggleStats);
 
 	//hide all docking panes
 	ui->toggleScenes->setChecked(false);
@@ -313,6 +314,7 @@ OBSBasic::OBSBasic(QWidget *parent)
 	ui->toggleMixer->setChecked(false);
 	ui->toggleTransitions->setChecked(false);
 	ui->toggleControls->setChecked(false);
+	ui->toggleStats->setChecked(false);
 
 	//restore parent window geometry
 	const char *geometry = config_get_string(App()->GlobalConfig(),
@@ -1590,6 +1592,10 @@ void OBSBasic::OBSInit()
 	show();
 #endif
 
+	/* setup stats dock */
+	OBSBasicStats *statsDlg = new OBSBasicStats(ui->statsDock, false);
+	ui->statsDock->setWidget(statsDlg);
+
 	const char *dockStateStr = config_get_string(App()->GlobalConfig(),
 			"BasicWindow", "DockState");
 	if (!dockStateStr) {
@@ -6110,7 +6116,8 @@ void OBSBasic::on_resetUI_triggered()
 		ui->sourcesDock,
 		ui->mixerDock,
 		ui->transitionsDock,
-		ui->controlsDock
+		ui->controlsDock,
+		ui->statsDock
 	};
 
 	QList<int> sizes {
@@ -6126,6 +6133,7 @@ void OBSBasic::on_resetUI_triggered()
 	ui->mixerDock->setVisible(true);
 	ui->transitionsDock->setVisible(true);
 	ui->controlsDock->setVisible(true);
+	ui->statsDock->setVisible(true);
 
 	resizeDocks(docks, {cy, cy, cy, cy, cy}, Qt::Vertical);
 	resizeDocks(docks, sizes, Qt::Horizontal);
@@ -6143,6 +6151,7 @@ void OBSBasic::on_lockUI_toggled(bool lock)
 	ui->mixerDock->setFeatures(features);
 	ui->transitionsDock->setFeatures(features);
 	ui->controlsDock->setFeatures(features);
+	ui->statsDock->setFeatures(features);
 }
 
 void OBSBasic::on_toggleListboxToolbars_toggled(bool visible)

+ 10 - 9
UI/window-basic-stats.cpp

@@ -28,7 +28,7 @@ static void setThemeID(QWidget *widget, const QString &themeID)
 	}
 }
 
-OBSBasicStats::OBSBasicStats(QWidget *parent)
+OBSBasicStats::OBSBasicStats(QWidget *parent, bool closeable)
 	: QWidget             (parent),
 	  cpu_info            (os_cpu_usage_info_start()),
 	  timer               (this)
@@ -75,13 +75,15 @@ OBSBasicStats::OBSBasicStats(QWidget *parent)
 	newStat("SkippedFrames", skippedFrames, 2);
 
 	/* --------------------------------------------- */
-
-	QPushButton *closeButton = new QPushButton(QTStr("Close"));
+	QPushButton *closeButton = nullptr;
+	if(closeable)
+		closeButton = new QPushButton(QTStr("Close"));
 	QPushButton *resetButton = new QPushButton(QTStr("Reset"));
 	QHBoxLayout *buttonLayout = new QHBoxLayout;
 	buttonLayout->addStretch();
 	buttonLayout->addWidget(resetButton);
-	buttonLayout->addWidget(closeButton);
+	if(closeable)
+		buttonLayout->addWidget(closeButton);
 
 	/* --------------------------------------------- */
 
@@ -125,16 +127,15 @@ OBSBasicStats::OBSBasicStats(QWidget *parent)
 	setLayout(mainLayout);
 
 	/* --------------------------------------------- */
-
-	connect(closeButton, &QPushButton::clicked, [this] () {close();});
+	if(closeable)
+		connect(closeButton, &QPushButton::clicked,
+				[this] () {close();});
 	connect(resetButton, &QPushButton::clicked, [this] () {Reset();});
 
 	installEventFilter(CreateShortcutFilter());
 
 	resize(800, 280);
-	setWindowFlags(Qt::Window |
-	               Qt::WindowMinimizeButtonHint |
-	               Qt::WindowCloseButtonHint);
+
 	setWindowTitle(QTStr("Basic.Stats"));
 	setWindowIcon(QIcon(":/res/images/obs.png"));
 	setWindowModality(Qt::NonModal);

+ 1 - 1
UI/window-basic-stats.hpp

@@ -55,7 +55,7 @@ class OBSBasicStats : public QWidget {
 	virtual void closeEvent(QCloseEvent *event) override;
 
 public:
-	OBSBasicStats(QWidget *parent = nullptr);
+	OBSBasicStats(QWidget *parent = nullptr, bool closable = true);
 	~OBSBasicStats();
 
 	static void InitializeValues();