Skip to content

Commit

Permalink
引入轻量跨平台框架wxwidgets
Browse files Browse the repository at this point in the history
  • Loading branch information
tmoonlight committed Aug 10, 2024
1 parent f198a8e commit adcbbdb
Show file tree
Hide file tree
Showing 12 changed files with 3,244 additions and 0 deletions.
3 changes: 3 additions & 0 deletions wx/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
build
build-dbg
.DS_Store
43 changes: 43 additions & 0 deletions wx/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
cmake_minimum_required(VERSION 3.14)

project(wxNSmartProxyClientGUI LANGUAGES CXX)

include(FetchContent)

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

set(wxBUILD_SHARED OFF)

message(STATUS "Fetching wxWidgets...")

FetchContent_Declare(
wxWidgets
GIT_REPOSITORY https://github.com/wxWidgets/wxWidgets.git
GIT_SHALLOW ON
)
FetchContent_MakeAvailable(wxWidgets)
#自动收集所有的.cpp .h源文件,不包含子目录
file(GLOB rootdir_files ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp ${CMAKE_CURRENT_SOURCE_DIR}/*.h)

message(rootdir_files: ${rootdir_files})
set(SRCS ${rootdir_files})

source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${SRC_FILES})

include_directories(${wxWidgets_SOURCE_DIR})

if(APPLE)
# create bundle on apple compiles
add_executable(main MACOSX_BUNDLE ${SRCS})

# Set a custom plist file for the app bundle - needed for Mac OS Retina display
set_target_properties(main PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist)
else()
# the WIN32 is needed for Windows in order for it to look for WinMain
# instead of the main function. This is ignored on other systems,
# so it works on all platforms
add_executable(main WIN32 ${SRCS} main.exe.manifest)
endif()

target_link_libraries(main PRIVATE wxcore wxnet)
16 changes: 16 additions & 0 deletions wx/Info.plist
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleIdentifier</key>
<string>com.lukesdevtutorials.wx_cmake_fetchcontent_template</string>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
<key>NSHighResolutionCapable</key>
<true/>
</dict>
</plist>
21 changes: 21 additions & 0 deletions wx/LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
MIT License

Copyright (c) 2024 lszl84

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
30 changes: 30 additions & 0 deletions wx/MainFrame.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
#include "MainFrame.h"
#include <wx/msgdlg.h>

MainFrame::MainFrame(wxWindow *parent, wxWindowID id, const wxString &title, const wxPoint &pos, const wxSize &size, long style)
: MainFrame_generated(parent, id, title, pos, size, style)
{
// 事件绑定
Bind(wxEVT_BUTTON, &MainFrame::OnBtnLogin, this, nsp_btnLogin);
Bind(wxEVT_BUTTON, &MainFrame::OnBtnStart, this, nsp_btnStart);
Bind(wxEVT_BUTTON, &MainFrame::OnBtnExit, this, nsp_btnExit);
}

void MainFrame::OnBtnLogin(wxCommandEvent &event)
{
wxMessageBox("Login");
}

void MainFrame::OnBtnStart(wxCommandEvent &event)
{
wxMessageBox("Start");
}

void MainFrame::OnBtnExit(wxCommandEvent &event)
{
wxMessageBox("Exit");
}

MainFrame::~MainFrame()
{
}
238 changes: 238 additions & 0 deletions wx/MainFrame.generated.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,238 @@
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version 4.2.1-0-g80c4cb6)
// http://www.wxformbuilder.org/
//
// PLEASE DO *NOT* EDIT THIS FILE!
///////////////////////////////////////////////////////////////////////////

#include "MainFrame.generated.h"

///////////////////////////////////////////////////////////////////////////

MainFrame_generated::MainFrame_generated( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxFrame( parent, id, title, pos, size, style )
{
this->SetSizeHints( wxSize( 840,600 ), wxDefaultSize );
this->SetBackgroundColour( wxColour( 234, 234, 234 ) );

wxBoxSizer* topSizer;
topSizer = new wxBoxSizer( wxVERTICAL );

m_tabctrlMain = new wxNotebook( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
m_tabctrlMain->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_HIGHLIGHTTEXT ) );

m_panelApp = new wxPanel( m_tabctrlMain, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
wxBoxSizer* bSizer11;
bSizer11 = new wxBoxSizer( wxVERTICAL );

wxStaticBoxSizer* sbSizer4;
sbSizer4 = new wxStaticBoxSizer( new wxStaticBox( m_panelApp, wxID_ANY, _("外网服务器") ), wxHORIZONTAL );

m_staticText1 = new wxStaticText( sbSizer4->GetStaticBox(), wxID_ANY, _("服务器地址"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText1->Wrap( -1 );
sbSizer4->Add( m_staticText1, 0, wxALL, 5 );

m_textCtrl1 = new wxTextCtrl( sbSizer4->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1,-1 ), 0 );
sbSizer4->Add( m_textCtrl1, 1, wxALL, 5 );


sbSizer4->Add( 30, 0, 0, wxEXPAND, 5 );

m_staticText2 = new wxStaticText( sbSizer4->GetStaticBox(), wxID_ANY, _("端口"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText2->Wrap( -1 );
sbSizer4->Add( m_staticText2, 0, wxALL, 5 );

m_textCtrl2 = new wxTextCtrl( sbSizer4->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 80,-1 ), 0 );
sbSizer4->Add( m_textCtrl2, 0, wxALL, 5 );

m_btnTest = new wxButton( sbSizer4->GetStaticBox(), wxID_ANY, _("测试"), wxDefaultPosition, wxDefaultSize, 0 );
sbSizer4->Add( m_btnTest, 0, wxALL, 5 );


bSizer11->Add( sbSizer4, 0, wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 10 );

wxBoxSizer* bSizer12;
bSizer12 = new wxBoxSizer( wxHORIZONTAL );

wxBoxSizer* bSizerLeft;
bSizerLeft = new wxBoxSizer( wxVERTICAL );

m_listBox1 = new wxListBox( m_panelApp, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
m_listBox1->Append( _("测试1") );
m_listBox1->Append( _("测试2") );
m_listBox1->Append( _("测试3") );
m_listBox1->Append( wxEmptyString );
m_listBox1->Append( wxEmptyString );
bSizerLeft->Add( m_listBox1, 1, wxALL|wxEXPAND, 10 );

m_panel8 = new wxPanel( m_panelApp, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
wSizer3 = new wxWrapSizer( wxHORIZONTAL, 0 );

m_btnAddNode = new wxButton( m_panel8, wxID_ANY, _("添加"), wxDefaultPosition, wxDefaultSize, 0 );
wSizer3->Add( m_btnAddNode, 0, wxALL, 5 );

m_btnDelNode = new wxButton( m_panel8, wxID_ANY, _("删除"), wxDefaultPosition, wxDefaultSize, 0 );
wSizer3->Add( m_btnDelNode, 0, wxALL, 5 );

m_btnDupNode = new wxButton( m_panel8, wxID_ANY, _("复制"), wxDefaultPosition, wxDefaultSize, 0 );
wSizer3->Add( m_btnDupNode, 0, wxALL, 5 );

m_btnRestoreNodes = new wxButton( m_panel8, wxID_ANY, _("还原配置"), wxDefaultPosition, wxDefaultSize, 0 );
wSizer3->Add( m_btnRestoreNodes, 0, wxALL, 5 );

m_btnSaveNodes = new wxButton( m_panel8, wxID_ANY, _("保存配置"), wxDefaultPosition, wxDefaultSize, 0 );
wSizer3->Add( m_btnSaveNodes, 0, wxALL, 5 );


m_panel8->SetSizer( wSizer3 );
m_panel8->Layout();
wSizer3->Fit( m_panel8 );
bSizerLeft->Add( m_panel8, 0, wxEXPAND | wxALL, 5 );


bSizer12->Add( bSizerLeft, 1, wxEXPAND, 5 );

m_panel10 = new wxPanel( m_panelApp, wxID_ANY, wxDefaultPosition, wxSize( -1,-1 ), wxTAB_TRAVERSAL );
wxBoxSizer* bSizer15;
bSizer15 = new wxBoxSizer( wxVERTICAL );

wxStaticBoxSizer* sbSizer2;
sbSizer2 = new wxStaticBoxSizer( new wxStaticBox( m_panel10, wxID_ANY, _("节点配置") ), wxVERTICAL );

m_panel81 = new wxPanel( sbSizer2->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
wxGridSizer* gSizer1;
gSizer1 = new wxGridSizer( 0, 2, 0, 0 );

m_staticText3 = new wxStaticText( m_panel81, wxID_ANY, _("连接协议:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText3->Wrap( -1 );
gSizer1->Add( m_staticText3, 0, wxALL, 5 );

wxArrayString m_choice1Choices;
m_choice1 = new wxChoice( m_panel81, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choice1Choices, 0 );
m_choice1->SetSelection( 0 );
gSizer1->Add( m_choice1, 0, wxALL, 5 );

m_staticText5 = new wxStaticText( m_panel81, wxID_ANY, _("内网地址:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText5->Wrap( -1 );
gSizer1->Add( m_staticText5, 0, wxALL, 5 );

m_textCtrl5 = new wxTextCtrl( m_panel81, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
gSizer1->Add( m_textCtrl5, 0, wxALL, 5 );

m_staticText6 = new wxStaticText( m_panel81, wxID_ANY, _("内网端口:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText6->Wrap( -1 );
gSizer1->Add( m_staticText6, 0, wxALL, 5 );

m_textCtrl6 = new wxTextCtrl( m_panel81, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
gSizer1->Add( m_textCtrl6, 0, wxALL, 5 );

m_staticText7 = new wxStaticText( m_panel81, wxID_ANY, _("外网端口(可选):"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText7->Wrap( -1 );
gSizer1->Add( m_staticText7, 0, wxALL, 5 );

m_textCtrl7 = new wxTextCtrl( m_panel81, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
gSizer1->Add( m_textCtrl7, 0, wxALL, 5 );

m_staticText8 = new wxStaticText( m_panel81, wxID_ANY, _("主机域名(可选):"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText8->Wrap( -1 );
gSizer1->Add( m_staticText8, 0, wxALL, 5 );

m_textCtrl8 = new wxTextCtrl( m_panel81, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
gSizer1->Add( m_textCtrl8, 0, wxALL, 5 );

m_staticText9 = new wxStaticText( m_panel81, wxID_ANY, _("节点描述(可选):"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText9->Wrap( -1 );
gSizer1->Add( m_staticText9, 0, wxALL, 5 );

m_textCtrl9 = new wxTextCtrl( m_panel81, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
gSizer1->Add( m_textCtrl9, 0, wxALL, 5 );

m_staticText10 = new wxStaticText( m_panel81, wxID_ANY, _("传输压缩:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText10->Wrap( -1 );
gSizer1->Add( m_staticText10, 0, wxALL, 5 );

m_checkBox1 = new wxCheckBox( m_panel81, wxID_ANY, _("启用"), wxDefaultPosition, wxDefaultSize, 0 );
gSizer1->Add( m_checkBox1, 0, wxALL, 5 );


m_panel81->SetSizer( gSizer1 );
m_panel81->Layout();
gSizer1->Fit( m_panel81 );
sbSizer2->Add( m_panel81, 0, wxEXPAND | wxALL, 5 );


bSizer15->Add( sbSizer2, 1, wxEXPAND, 5 );

m_checkBox2 = new wxCheckBox( m_panel10, wxID_ANY, _("使用服务端配置"), wxDefaultPosition, wxDefaultSize, 0 );
bSizer15->Add( m_checkBox2, 0, wxALL, 5 );


m_panel10->SetSizer( bSizer15 );
m_panel10->Layout();
bSizer15->Fit( m_panel10 );
bSizer12->Add( m_panel10, 0, wxEXPAND | wxALL, 5 );


bSizer11->Add( bSizer12, 1, wxEXPAND, 5 );


m_panelApp->SetSizer( bSizer11 );
m_panelApp->Layout();
bSizer11->Fit( m_panelApp );
m_tabctrlMain->AddPage( m_panelApp, _("应用"), true );
m_panelLog = new wxPanel( m_tabctrlMain, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
wxBoxSizer* bSizer7;
bSizer7 = new wxBoxSizer( wxVERTICAL );

m_textCtrl4 = new wxTextCtrl( m_panelLog, wxID_ANY, _("测试日志测试日志测试日志测试日志测试日志测试日志测试日志测试日志测试日志测试日志测试日志测试日志测试日志测试日志测试日志测试日志测试日志测试日志测试日志测试日志测试日志测试日志测试日志测试日志"), wxDefaultPosition, wxDefaultSize, wxTE_CHARWRAP|wxTE_MULTILINE );
m_textCtrl4->SetForegroundColour( wxColour( 255, 255, 255 ) );
m_textCtrl4->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BACKGROUND ) );

bSizer7->Add( m_textCtrl4, 1, wxALL|wxEXPAND, 5 );


m_panelLog->SetSizer( bSizer7 );
m_panelLog->Layout();
bSizer7->Fit( m_panelLog );
m_tabctrlMain->AddPage( m_panelLog, _("日志"), false );
m_panel6 = new wxPanel( m_tabctrlMain, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
m_tabctrlMain->AddPage( m_panel6, _("服务"), false );
m_panel7 = new wxPanel( m_tabctrlMain, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
m_tabctrlMain->AddPage( m_panel7, _("关于"), false );

topSizer->Add( m_tabctrlMain, 1, wxEXPAND | wxALL, 5 );

m_pnlBottomBtns = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
wxBoxSizer* sizer_pnlBottomBtns;
sizer_pnlBottomBtns = new wxBoxSizer( wxHORIZONTAL );

m_btnLogin = new wxButton( m_pnlBottomBtns, nsp_btnLogin, _("未登录"), wxDefaultPosition, wxDefaultSize, 0 );
sizer_pnlBottomBtns->Add( m_btnLogin, 0, wxALL, 5 );


sizer_pnlBottomBtns->Add( 0, 0, 1, wxEXPAND, 5 );

m_btnStart = new wxButton( m_pnlBottomBtns, nsp_btnStart, _("开始"), wxDefaultPosition, wxDefaultSize, 0 );
sizer_pnlBottomBtns->Add( m_btnStart, 0, wxALL, 5 );


sizer_pnlBottomBtns->Add( 0, 0, 1, wxEXPAND, 5 );

m_btnExit = new wxButton( m_pnlBottomBtns, nsp_btnExit, _("退出程序"), wxDefaultPosition, wxDefaultSize, 0 );
sizer_pnlBottomBtns->Add( m_btnExit, 0, wxALL, 5 );


m_pnlBottomBtns->SetSizer( sizer_pnlBottomBtns );
m_pnlBottomBtns->Layout();
sizer_pnlBottomBtns->Fit( m_pnlBottomBtns );
topSizer->Add( m_pnlBottomBtns, 0, wxEXPAND | wxALL, 5 );


this->SetSizer( topSizer );
this->Layout();

this->Centre( wxBOTH );
}

MainFrame_generated::~MainFrame_generated()
{
}
Loading

0 comments on commit adcbbdb

Please sign in to comment.