提交 500013cb 编写于 作者: P peterq

add: 窗口标题栏菜单; 重启功能

上级 a7edd8cb
......@@ -11,6 +11,8 @@ import (
"os/exec"
"path/filepath"
"regexp"
"runtime"
"strconv"
"strings"
)
......@@ -131,7 +133,7 @@ func pcDev() {
_, err := os.Stat(pluginPath)
if os.IsNotExist(err) || rebuildPlugin {
log.Println("编译gui插件...")
runCmd("./pc", "go", "build", "-tags=plugin", "--buildmode=plugin", "-o", "gui/gui-plugin.so", "gui/gui-plugin.go")
runCmd("./pc", "go", "build", "-p", strconv.Itoa(runtime.NumCPU()-1), "-v", "-tags=plugin", "--buildmode=plugin", "-o", "gui/gui-plugin.so", "gui/gui-plugin.go")
}
log.Println("打包qml...")
cmd(qtBin("rcc"), "-binary", "pc/gui/qml/qml.qrc", "-o", "pc/gui/qml/qml.rcc").Run()
......
......@@ -3,6 +3,7 @@ package functions
import (
"github.com/peterq/pan-light/pc/dep"
"github.com/peterq/pan-light/pc/storage"
"os"
)
func init() {
......@@ -24,6 +25,11 @@ var baseSyncRoutes = map[string]syncHandler{
"storage.get": func(p map[string]interface{}) (result interface{}) {
return storage.UserStorageGet(p["k"].(string))
},
// 重启
"reboot": func(p map[string]interface{}) (result interface{}) {
os.Exit(2)
return
},
}
var baseAsyncRoutes = map[string]asyncHandler{}
......@@ -21,10 +21,15 @@ Window {
| Qt.WindowStaysOnTopHint | Qt.X11BypassWindowManagerHint
color: 'transparent'
Component.onCompleted: {
App.appState.floatWindow = root
}
DataSaver {
$key: 'window.float'
property alias x: root.x
property alias y: root.y
property alias visible: root.visible
}
Rectangle {
......
......@@ -22,6 +22,7 @@ Item {
property var downloadingList: []
property var completedList: []
property var transferComp: null
property var floatWindow: null
property alias settings: settings
DataSaver {
......
import QtQuick 2.0
import QtGraphicalEffects 1.0
import QtQuick.Window 2.2
import QtQuick.Controls 1.4
import "../comps"
import "../js/global.js" as G
import "../js/util.js" as Util
import "../js/app.js" as App
Item {
property Component content
property int shadeWidth: isMax ? 0 : 10
......@@ -44,6 +46,9 @@ Item {
iconType: 'more-down'
title: '更多'
width: 20
onClicked: {
moreMenu.popup()
}
}
IconButton {
iconType: 'min'
......@@ -113,4 +118,38 @@ Item {
Component.onCompleted: {
mainWindow = G.root
}
// 右键菜单
Menu {
id: moreMenu
MenuItem {
text: (App.appState.floatWindow.visible ? '隐藏' : '显示') + '悬浮窗'
onTriggered: {
App.appState.floatWindow.visible = !App.appState.floatWindow.visible
}
}
MenuItem {
text: '设置'
onTriggered: {
}
}
MenuItem {
text: '关于'
onTriggered: {
}
}
MenuItem {
text: '问题反馈'
onTriggered: {
}
}
MenuItem {
text: '重启'
onTriggered: Util.callGoSync("reboot")
}
MenuItem {
text: '退出程序'
onTriggered: Qt.quit()
}
}
}
......@@ -6,11 +6,42 @@ import (
"github.com/peterq/pan-light/pc/dep"
"github.com/peterq/pan-light/pc/functions"
"log"
"os"
"os/exec"
"plugin"
"syscall"
)
const startCmd = "pan_light_start"
func master() {
log.Println("master process")
START_PAN:
c := exec.Command(os.Args[0], os.Args[1:]...)
c.Args[0] = startCmd
c.Stderr = os.Stderr
c.Stdout = os.Stdout
c.Stdin = os.Stdin
err := c.Run()
if err != nil {
if exiterr, ok := err.(*exec.ExitError); ok {
if status, ok := exiterr.Sys().(syscall.WaitStatus); ok {
code := status.ExitStatus()
if code == 2 {
goto START_PAN
}
}
}
}
log.Fatal(err)
}
func main() {
log.SetFlags(log.LstdFlags | log.Lshortfile)
if os.Args[0] != startCmd {
master()
}
log.Println("pan-light process")
defer func() {
dep.DoClose()
}()
......
......@@ -5,14 +5,47 @@ package main
import (
"github.com/peterq/pan-light/pc/dep"
"github.com/peterq/pan-light/pc/gui"
"log"
"os"
"os/exec"
"syscall"
)
//go:generate protoc --go_out=. storage/types.proto
//go:generate protoc --go_out=. downloader/internal/types.proto
func main() {
log.SetFlags(log.LstdFlags | log.Lshortfile)
if os.Args[0] != startCmd {
master()
}
log.Println("pan-light process")
defer func() {
dep.DoClose()
}()
dep.DoInit()
gui.StartGui()
}
const startCmd = "pan_light_start"
func master() {
log.Println("master process")
START_PAN:
c := exec.Command(os.Args[0], os.Args[1:]...)
c.Args[0] = startCmd
c.Stderr = os.Stderr
c.Stdout = os.Stdout
c.Stdin = os.Stdin
err := c.Run()
if err != nil {
if exiterr, ok := err.(*exec.ExitError); ok {
if status, ok := exiterr.Sys().(syscall.WaitStatus); ok {
code := status.ExitStatus()
if code == 2 {
goto START_PAN
}
}
}
}
log.Fatal(err)
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册