Network Health Panel with mining

This commit is contained in:
Alexandre Van de Sande 2015-03-02 18:39:07 -03:00
parent dea6584018
commit 21c373b55d
5 changed files with 178 additions and 27 deletions

View File

@ -17,7 +17,6 @@
// this function is included locally, but you can also include separately via a header definition
console.log("loaded?");
document.onkeydown = function(evt) {
// This functions keeps track of keyboard inputs in order to allow copy, paste and other features

View File

@ -46,12 +46,13 @@ ApplicationWindow {
walletWeb.view.url = "http://ethereum-dapp-wallet.meteor.com/";
walletWeb.menuItem.title = "Wallet";
addPlugin("./views/miner.qml", {noAdd: true, close: false, section: "ethereum", active: false});
addPlugin("./views/miner.qml", {noAdd: true, close: false, section: "legacy", active: false});
addPlugin("./views/network.qml", {noAdd: true, close: false, section: "ethereum", active: false});
var whisperTab = addPlugin("./views/browser.qml", {noAdd: true, close: true, section: "ethereum", active: false});
/* var whisperTab = addPlugin("./views/browser.qml", {noAdd: true, close: true, section: "ethereum", active: false});
whisperTab.view.url = "http://ethereum-dapp-whisper-client.meteor.com/";
whisperTab.menuItem.title = "Whisper Chat";
*/
addPlugin("./views/wallet.qml", {noAdd: true, close: false, section: "legacy"});
addPlugin("./views/transaction.qml", {noAdd: true, close: false, section: "legacy"});
addPlugin("./views/whisper.qml", {noAdd: true, close: false, section: "legacy"});
@ -536,6 +537,8 @@ ApplicationWindow {
Text {
id: secondary
//only shows secondary title if there's no badge
visible: (badgeContent == "icon" || badgeContent == "number" )? false : true
font.family: sourceSansPro.name
font.weight: Font.Light
anchors {
@ -730,18 +733,14 @@ ApplicationWindow {
Rectangle {
height: 19
color: "#00ff00"
visible: (menuApps.children.length > 0)
Text {
text: "APPS"
font.family: sourceSansPro.name
font.weight: Font.Regular
anchors.fill: parent
anchors.leftMargin: 16
// anchors {
// left: parent.left
// top: parent.top
// leftMargin: 16
// }
color: "#AAA0A0"
}
}
@ -749,6 +748,8 @@ ApplicationWindow {
ColumnLayout {
id: menuApps
spacing: 3
anchors {
left: parent.left
right: parent.right
@ -775,7 +776,7 @@ ApplicationWindow {
ColumnLayout {
id: menuLegacy
visible: false
visible: true
spacing: 3
anchors {
left: parent.left

View File

@ -24,17 +24,6 @@ Rectangle {
}
}
Label {
objectName: "miningLabel"
visible: false
font.pixelSize: 10
anchors.right: lastBlockLabel.left
anchors.rightMargin: 5
onTextChanged: {
menuItem.secondaryTitle = text
}
}
ColumnLayout {
spacing: 10
anchors.fill: parent

View File

@ -0,0 +1,163 @@
import QtQuick 2.0
import QtQuick.Controls 1.0;
import QtQuick.Controls.Styles 1.0
import QtQuick.Layouts 1.0;
import QtWebEngine 1.0
import QtWebEngine.experimental 1.0
import QtQuick.Window 2.0;
import Ethereum 1.0
import Qt.WebSockets 1.0
//import "qwebchannel.js" as WebChannel
Rectangle {
id: window
anchors.fill: parent
color: "#00000000"
property var title: "Network"
property var iconSource: "../mining-icon.png"
property var menuItem
property var hideUrl: true
property alias url: webview.url
property alias windowTitle: webview.title
property alias webView: webview
property var cleanPath: false
property var open: function(url) {
if(!window.cleanPath) {
var uri = url;
if(!/.*\:\/\/.*/.test(uri)) {
uri = "http://" + uri;
}
var reg = /(^https?\:\/\/(?:www\.)?)([a-zA-Z0-9_\-]*\.eth)(.*)/
if(reg.test(uri)) {
uri.replace(reg, function(match, pre, domain, path) {
uri = pre;
var lookup = eth.lookupDomain(domain.substring(0, domain.length - 4));
var ip = [];
for(var i = 0, l = lookup.length; i < l; i++) {
ip.push(lookup.charCodeAt(i))
}
if(ip.length != 0) {
uri += lookup;
} else {
uri += domain;
}
uri += path;
});
}
window.cleanPath = true;
webview.url = uri;
//uriNav.text = uri.text.replace(/(^https?\:\/\/(?:www\.)?)([a-zA-Z0-9_\-]*\.\w{2,3})(.*)/, "$1$2<span style='color:#CCC'>$3</span>");
uriNav.text = uri;
} else {
// Prevent inf loop.
window.cleanPath = false;
}
}
Label {
objectName: "miningLabel"
visible: false
font.pixelSize: 10
anchors.right: lastBlockLabel.left
anchors.rightMargin: 5
onTextChanged: {
menuItem.secondaryTitle = eth.miner().mining()? eth.miner().hashRate() + " Khash" : ""
}
}
Item {
objectName: "root"
id: root
anchors.fill: parent
state: "inspectorShown"
Timer {
interval: 1000; running: true; repeat: true
onTriggered: {
webview.runJavaScript("Miner.mining", function(miningSliderValue) {
// Check if it's mining and set it accordingly
if (miningSliderValue > 0 && !eth.miner().mining()) {
eth.setGasPrice("10000000000000");
eth.miner().start();
} else if (miningSliderValue == 0 && eth.miner().mining()) {
eth.miner().stop();
} else if (eth.miner().mining()) {
webview.runJavaScript('console.log(localStorage.timeSpent); Miner.timeSpentMining++; Miner.hashrate = ' + eth.miner().hashRate() );
} else if (miningSliderValue == "undefined") {
webview.runJavaScript('Miner.mining = 0' );
}
});
}
}
WebEngineView {
objectName: "webView"
id: webview
anchors.fill: parent
url: "http://localhost:3000/"
experimental.settings.javascriptCanAccessClipboard: true
onJavaScriptConsoleMessage: {
console.log(sourceID + ":" + lineNumber + ":" + JSON.stringify(message));
}
onLoadingChanged: {
if (loadRequest.status == WebEngineView.LoadSucceededStatus) {
webview.runJavaScript(eth.readFile("mist.js"));
}
}
}
WebEngineView {
id: inspector
visible: false
z:10
anchors {
left: root.left
right: root.right
top: root.top
bottom: root.bottom
}
}
states: [
State {
name: "inspectorShown"
PropertyChanges {
target: inspector
}
}
]
}
}

View File

@ -419,8 +419,7 @@ func (gui *Gui) update() {
case <-generalUpdateTicker.C:
statusText := "#" + gui.eth.ChainManager().CurrentBlock().Number().String()
lastBlockLabel.Set("text", statusText)
miningLabel.Set("text", "Mining @ "+strconv.FormatInt(gui.uiLib.Miner().HashRate(), 10)+"/Khash")
//miningLabel.Set("text", strconv.FormatInt(gui.uiLib.Miner().HashRate(), 10))
case <-statsUpdateTicker.C:
gui.setStatsPane()
}