feat(modulo): implement textview UI
This commit is contained in:
parent
6168a28291
commit
fff9f63f96
|
@ -121,6 +121,8 @@ fn build_native() {
|
||||||
.file("src/sys/wizard/wizard_gui.cpp")
|
.file("src/sys/wizard/wizard_gui.cpp")
|
||||||
.file("src/sys/welcome/welcome.cpp")
|
.file("src/sys/welcome/welcome.cpp")
|
||||||
.file("src/sys/welcome/welcome_gui.cpp")
|
.file("src/sys/welcome/welcome_gui.cpp")
|
||||||
|
.file("src/sys/textview/textview.cpp")
|
||||||
|
.file("src/sys/textview/textview_gui.cpp")
|
||||||
.file("src/sys/troubleshooting/troubleshooting.cpp")
|
.file("src/sys/troubleshooting/troubleshooting.cpp")
|
||||||
.file("src/sys/troubleshooting/troubleshooting_gui.cpp")
|
.file("src/sys/troubleshooting/troubleshooting_gui.cpp")
|
||||||
.flag("/EHsc")
|
.flag("/EHsc")
|
||||||
|
@ -258,6 +260,8 @@ fn build_native() {
|
||||||
.file("src/sys/wizard/wizard_gui.cpp")
|
.file("src/sys/wizard/wizard_gui.cpp")
|
||||||
.file("src/sys/welcome/welcome.cpp")
|
.file("src/sys/welcome/welcome.cpp")
|
||||||
.file("src/sys/welcome/welcome_gui.cpp")
|
.file("src/sys/welcome/welcome_gui.cpp")
|
||||||
|
.file("src/sys/textview/textview.cpp")
|
||||||
|
.file("src/sys/textview/textview_gui.cpp")
|
||||||
.file("src/sys/troubleshooting/troubleshooting.cpp")
|
.file("src/sys/troubleshooting/troubleshooting.cpp")
|
||||||
.file("src/sys/troubleshooting/troubleshooting_gui.cpp")
|
.file("src/sys/troubleshooting/troubleshooting_gui.cpp")
|
||||||
.file("src/sys/common/mac.mm");
|
.file("src/sys/common/mac.mm");
|
||||||
|
@ -452,6 +456,8 @@ fn build_native() {
|
||||||
.file("src/sys/wizard/wizard_gui.cpp")
|
.file("src/sys/wizard/wizard_gui.cpp")
|
||||||
.file("src/sys/welcome/welcome.cpp")
|
.file("src/sys/welcome/welcome.cpp")
|
||||||
.file("src/sys/welcome/welcome_gui.cpp")
|
.file("src/sys/welcome/welcome_gui.cpp")
|
||||||
|
.file("src/sys/textview/textview.cpp")
|
||||||
|
.file("src/sys/textview/textview_gui.cpp")
|
||||||
.file("src/sys/troubleshooting/troubleshooting.cpp")
|
.file("src/sys/troubleshooting/troubleshooting.cpp")
|
||||||
.file("src/sys/troubleshooting/troubleshooting_gui.cpp");
|
.file("src/sys/troubleshooting/troubleshooting_gui.cpp");
|
||||||
build.flag("-std=c++17");
|
build.flag("-std=c++17");
|
||||||
|
|
|
@ -23,6 +23,7 @@ extern crate lazy_static;
|
||||||
pub mod form;
|
pub mod form;
|
||||||
pub mod search;
|
pub mod search;
|
||||||
mod sys;
|
mod sys;
|
||||||
|
pub mod textview;
|
||||||
pub mod troubleshooting;
|
pub mod troubleshooting;
|
||||||
pub mod welcome;
|
pub mod welcome;
|
||||||
pub mod wizard;
|
pub mod wizard;
|
||||||
|
|
|
@ -168,3 +168,11 @@ typedef struct TroubleshootingMetadata {
|
||||||
int (*dont_show_again_changed)(int);
|
int (*dont_show_again_changed)(int);
|
||||||
int (*open_file)(const char * file_name);
|
int (*open_file)(const char * file_name);
|
||||||
} TroubleshootingMetadata;
|
} TroubleshootingMetadata;
|
||||||
|
|
||||||
|
// TextView
|
||||||
|
|
||||||
|
typedef struct TextViewMetadata {
|
||||||
|
const char *window_icon_path;
|
||||||
|
const char *title;
|
||||||
|
const char *content;
|
||||||
|
} TextViewMetadata;
|
||||||
|
|
|
@ -189,6 +189,14 @@ pub struct ErrorMetadata {
|
||||||
pub message: *const c_char,
|
pub message: *const c_char,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[repr(C)]
|
||||||
|
#[derive(Debug, Copy, Clone)]
|
||||||
|
pub struct TextViewMetadata {
|
||||||
|
pub window_icon_path: *const c_char,
|
||||||
|
pub title: *const c_char,
|
||||||
|
pub content: *const c_char,
|
||||||
|
}
|
||||||
|
|
||||||
// Native bindings
|
// Native bindings
|
||||||
|
|
||||||
#[allow(improper_ctypes)]
|
#[allow(improper_ctypes)]
|
||||||
|
@ -220,4 +228,7 @@ extern "C" {
|
||||||
|
|
||||||
// TROUBLESHOOTING
|
// TROUBLESHOOTING
|
||||||
pub(crate) fn interop_show_troubleshooting(metadata: *const TroubleshootingMetadata);
|
pub(crate) fn interop_show_troubleshooting(metadata: *const TroubleshootingMetadata);
|
||||||
|
|
||||||
|
// TEXTVIEW
|
||||||
|
pub(crate) fn interop_show_text_view(metadata: *const TextViewMetadata);
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
|
|
||||||
pub mod form;
|
pub mod form;
|
||||||
pub mod search;
|
pub mod search;
|
||||||
|
pub mod textview;
|
||||||
pub mod troubleshooting;
|
pub mod troubleshooting;
|
||||||
pub mod welcome;
|
pub mod welcome;
|
||||||
pub mod wizard;
|
pub mod wizard;
|
||||||
|
|
40
espanso-modulo/src/sys/textview/mod.rs
Normal file
40
espanso-modulo/src/sys/textview/mod.rs
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
/*
|
||||||
|
* This file is part of modulo.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2020-2021 Federico Terzi
|
||||||
|
*
|
||||||
|
* modulo is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* modulo is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with modulo. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
use std::ffi::CString;
|
||||||
|
|
||||||
|
use crate::sys::util::convert_to_cstring_or_null;
|
||||||
|
use crate::{sys::interop::TextViewMetadata, textview::TextViewOptions};
|
||||||
|
|
||||||
|
pub fn show(options: TextViewOptions) {
|
||||||
|
let (_c_window_icon_path, c_window_icon_path_ptr) =
|
||||||
|
convert_to_cstring_or_null(options.window_icon_path);
|
||||||
|
let c_title = CString::new(options.title).expect("unable to convert title to CString");
|
||||||
|
let c_content = CString::new(options.content).expect("unable to convert content to CString");
|
||||||
|
|
||||||
|
let textview_metadata = TextViewMetadata {
|
||||||
|
window_icon_path: c_window_icon_path_ptr,
|
||||||
|
title: c_title.as_ptr(),
|
||||||
|
content: c_content.as_ptr(),
|
||||||
|
};
|
||||||
|
|
||||||
|
unsafe {
|
||||||
|
super::interop::interop_show_text_view(&textview_metadata);
|
||||||
|
}
|
||||||
|
}
|
92
espanso-modulo/src/sys/textview/textview.cpp
Normal file
92
espanso-modulo/src/sys/textview/textview.cpp
Normal file
|
@ -0,0 +1,92 @@
|
||||||
|
/*
|
||||||
|
* This file is part of modulo.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2020-2021 Federico Terzi
|
||||||
|
*
|
||||||
|
* modulo is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* modulo is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with modulo. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define _UNICODE
|
||||||
|
|
||||||
|
#include "../common/common.h"
|
||||||
|
#include "../interop/interop.h"
|
||||||
|
#include "./textview_gui.h"
|
||||||
|
|
||||||
|
#include <wx/clipbrd.h>
|
||||||
|
#include <vector>
|
||||||
|
#include <memory>
|
||||||
|
#include <unordered_map>
|
||||||
|
|
||||||
|
TextViewMetadata *text_view_metadata = nullptr;
|
||||||
|
|
||||||
|
// App Code
|
||||||
|
|
||||||
|
class TextViewApp : public wxApp
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual bool OnInit();
|
||||||
|
};
|
||||||
|
|
||||||
|
class DerivedTextViewFrame : public TextViewFrame
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
void on_copy_to_clipboard( wxCommandEvent& event );
|
||||||
|
|
||||||
|
public:
|
||||||
|
DerivedTextViewFrame(wxWindow *parent);
|
||||||
|
};
|
||||||
|
|
||||||
|
DerivedTextViewFrame::DerivedTextViewFrame(wxWindow *parent)
|
||||||
|
: TextViewFrame(parent)
|
||||||
|
{
|
||||||
|
this->text_content->SetValue(wxString::FromUTF8(text_view_metadata->content));
|
||||||
|
this->SetTitle(wxString::FromUTF8(text_view_metadata->title));
|
||||||
|
}
|
||||||
|
|
||||||
|
void DerivedTextViewFrame::on_copy_to_clipboard( wxCommandEvent& event ) {
|
||||||
|
if (wxTheClipboard->Open())
|
||||||
|
{
|
||||||
|
wxTheClipboard->SetData( new wxTextDataObject(wxString::FromUTF8(text_view_metadata->content)) );
|
||||||
|
wxTheClipboard->Close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TextViewApp::OnInit()
|
||||||
|
{
|
||||||
|
DerivedTextViewFrame *frame = new DerivedTextViewFrame(NULL);
|
||||||
|
|
||||||
|
if (text_view_metadata->window_icon_path)
|
||||||
|
{
|
||||||
|
setFrameIcon(wxString::FromUTF8(text_view_metadata->window_icon_path), frame);
|
||||||
|
}
|
||||||
|
|
||||||
|
frame->Show(true);
|
||||||
|
Activate(frame);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
extern "C" void interop_show_text_view(TextViewMetadata *_metadata)
|
||||||
|
{
|
||||||
|
// Setup high DPI support on Windows
|
||||||
|
#ifdef __WXMSW__
|
||||||
|
SetProcessDPIAware();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
text_view_metadata = _metadata;
|
||||||
|
|
||||||
|
wxApp::SetInstance(new TextViewApp());
|
||||||
|
int argc = 0;
|
||||||
|
wxEntry(argc, (char **)nullptr);
|
||||||
|
}
|
223
espanso-modulo/src/sys/textview/textview.fbp
Normal file
223
espanso-modulo/src/sys/textview/textview.fbp
Normal file
|
@ -0,0 +1,223 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
|
||||||
|
<wxFormBuilder_Project>
|
||||||
|
<FileVersion major="1" minor="15" />
|
||||||
|
<object class="Project" expanded="1">
|
||||||
|
<property name="class_decoration">; </property>
|
||||||
|
<property name="code_generation">C++</property>
|
||||||
|
<property name="disconnect_events">1</property>
|
||||||
|
<property name="disconnect_mode">source_name</property>
|
||||||
|
<property name="disconnect_php_events">0</property>
|
||||||
|
<property name="disconnect_python_events">0</property>
|
||||||
|
<property name="embedded_files_path">res</property>
|
||||||
|
<property name="encoding">UTF-8</property>
|
||||||
|
<property name="event_generation">connect</property>
|
||||||
|
<property name="file">textview_gui</property>
|
||||||
|
<property name="first_id">1000</property>
|
||||||
|
<property name="help_provider">none</property>
|
||||||
|
<property name="indent_with_spaces"></property>
|
||||||
|
<property name="internationalize">0</property>
|
||||||
|
<property name="name">TextView</property>
|
||||||
|
<property name="namespace"></property>
|
||||||
|
<property name="path">.</property>
|
||||||
|
<property name="precompiled_header">#define _UNICODE</property>
|
||||||
|
<property name="relative_path">1</property>
|
||||||
|
<property name="skip_lua_events">1</property>
|
||||||
|
<property name="skip_php_events">1</property>
|
||||||
|
<property name="skip_python_events">1</property>
|
||||||
|
<property name="ui_table">UI</property>
|
||||||
|
<property name="use_enum">0</property>
|
||||||
|
<property name="use_microsoft_bom">0</property>
|
||||||
|
<object class="Frame" expanded="1">
|
||||||
|
<property name="aui_managed">0</property>
|
||||||
|
<property name="aui_manager_style">wxAUI_MGR_DEFAULT</property>
|
||||||
|
<property name="bg">wxSYS_COLOUR_WINDOW</property>
|
||||||
|
<property name="center">wxBOTH</property>
|
||||||
|
<property name="context_help"></property>
|
||||||
|
<property name="context_menu">1</property>
|
||||||
|
<property name="enabled">1</property>
|
||||||
|
<property name="event_handler">impl_virtual</property>
|
||||||
|
<property name="extra_style"></property>
|
||||||
|
<property name="fg"></property>
|
||||||
|
<property name="font"></property>
|
||||||
|
<property name="hidden">0</property>
|
||||||
|
<property name="id">wxID_ANY</property>
|
||||||
|
<property name="maximum_size"></property>
|
||||||
|
<property name="minimum_size"></property>
|
||||||
|
<property name="name">TextViewFrame</property>
|
||||||
|
<property name="pos"></property>
|
||||||
|
<property name="size">895,545</property>
|
||||||
|
<property name="style">wxDEFAULT_FRAME_STYLE</property>
|
||||||
|
<property name="subclass">; ; forward_declare</property>
|
||||||
|
<property name="title">TextView</property>
|
||||||
|
<property name="tooltip"></property>
|
||||||
|
<property name="window_extra_style"></property>
|
||||||
|
<property name="window_name"></property>
|
||||||
|
<property name="window_style">wxTAB_TRAVERSAL</property>
|
||||||
|
<property name="xrc_skip_sizer">1</property>
|
||||||
|
<object class="wxBoxSizer" expanded="1">
|
||||||
|
<property name="minimum_size"></property>
|
||||||
|
<property name="name">bSizer1</property>
|
||||||
|
<property name="orient">wxVERTICAL</property>
|
||||||
|
<property name="permission">none</property>
|
||||||
|
<object class="sizeritem" expanded="1">
|
||||||
|
<property name="border">5</property>
|
||||||
|
<property name="flag">wxALL|wxEXPAND</property>
|
||||||
|
<property name="proportion">1</property>
|
||||||
|
<object class="wxTextCtrl" expanded="1">
|
||||||
|
<property name="BottomDockable">1</property>
|
||||||
|
<property name="LeftDockable">1</property>
|
||||||
|
<property name="RightDockable">1</property>
|
||||||
|
<property name="TopDockable">1</property>
|
||||||
|
<property name="aui_layer"></property>
|
||||||
|
<property name="aui_name"></property>
|
||||||
|
<property name="aui_position"></property>
|
||||||
|
<property name="aui_row"></property>
|
||||||
|
<property name="best_size"></property>
|
||||||
|
<property name="bg"></property>
|
||||||
|
<property name="caption"></property>
|
||||||
|
<property name="caption_visible">1</property>
|
||||||
|
<property name="center_pane">0</property>
|
||||||
|
<property name="close_button">1</property>
|
||||||
|
<property name="context_help"></property>
|
||||||
|
<property name="context_menu">1</property>
|
||||||
|
<property name="default_pane">0</property>
|
||||||
|
<property name="dock">Dock</property>
|
||||||
|
<property name="dock_fixed">0</property>
|
||||||
|
<property name="docking">Left</property>
|
||||||
|
<property name="enabled">1</property>
|
||||||
|
<property name="fg"></property>
|
||||||
|
<property name="floatable">1</property>
|
||||||
|
<property name="font">,90,90,-1,76,0</property>
|
||||||
|
<property name="gripper">0</property>
|
||||||
|
<property name="hidden">0</property>
|
||||||
|
<property name="id">wxID_ANY</property>
|
||||||
|
<property name="max_size"></property>
|
||||||
|
<property name="maximize_button">0</property>
|
||||||
|
<property name="maximum_size"></property>
|
||||||
|
<property name="maxlength"></property>
|
||||||
|
<property name="min_size"></property>
|
||||||
|
<property name="minimize_button">0</property>
|
||||||
|
<property name="minimum_size"></property>
|
||||||
|
<property name="moveable">1</property>
|
||||||
|
<property name="name">text_content</property>
|
||||||
|
<property name="pane_border">1</property>
|
||||||
|
<property name="pane_position"></property>
|
||||||
|
<property name="pane_size"></property>
|
||||||
|
<property name="permission">protected</property>
|
||||||
|
<property name="pin_button">1</property>
|
||||||
|
<property name="pos"></property>
|
||||||
|
<property name="resize">Resizable</property>
|
||||||
|
<property name="show">1</property>
|
||||||
|
<property name="size"></property>
|
||||||
|
<property name="style">wxTE_MULTILINE|wxTE_READONLY</property>
|
||||||
|
<property name="subclass">; ; forward_declare</property>
|
||||||
|
<property name="toolbar_pane">0</property>
|
||||||
|
<property name="tooltip"></property>
|
||||||
|
<property name="validator_data_type"></property>
|
||||||
|
<property name="validator_style">wxFILTER_NONE</property>
|
||||||
|
<property name="validator_type">wxDefaultValidator</property>
|
||||||
|
<property name="validator_variable"></property>
|
||||||
|
<property name="value"></property>
|
||||||
|
<property name="window_extra_style"></property>
|
||||||
|
<property name="window_name"></property>
|
||||||
|
<property name="window_style"></property>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object class="sizeritem" expanded="1">
|
||||||
|
<property name="border">10</property>
|
||||||
|
<property name="flag">wxEXPAND</property>
|
||||||
|
<property name="proportion">0</property>
|
||||||
|
<object class="wxBoxSizer" expanded="1">
|
||||||
|
<property name="minimum_size"></property>
|
||||||
|
<property name="name">bSizer2</property>
|
||||||
|
<property name="orient">wxHORIZONTAL</property>
|
||||||
|
<property name="permission">none</property>
|
||||||
|
<object class="sizeritem" expanded="1">
|
||||||
|
<property name="border">5</property>
|
||||||
|
<property name="flag">wxEXPAND</property>
|
||||||
|
<property name="proportion">1</property>
|
||||||
|
<object class="spacer" expanded="1">
|
||||||
|
<property name="height">0</property>
|
||||||
|
<property name="permission">protected</property>
|
||||||
|
<property name="width">0</property>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object class="sizeritem" expanded="1">
|
||||||
|
<property name="border">10</property>
|
||||||
|
<property name="flag">wxALIGN_CENTER_VERTICAL|wxALL</property>
|
||||||
|
<property name="proportion">0</property>
|
||||||
|
<object class="wxButton" expanded="1">
|
||||||
|
<property name="BottomDockable">1</property>
|
||||||
|
<property name="LeftDockable">1</property>
|
||||||
|
<property name="RightDockable">1</property>
|
||||||
|
<property name="TopDockable">1</property>
|
||||||
|
<property name="aui_layer"></property>
|
||||||
|
<property name="aui_name"></property>
|
||||||
|
<property name="aui_position"></property>
|
||||||
|
<property name="aui_row"></property>
|
||||||
|
<property name="best_size"></property>
|
||||||
|
<property name="bg"></property>
|
||||||
|
<property name="bitmap"></property>
|
||||||
|
<property name="caption"></property>
|
||||||
|
<property name="caption_visible">1</property>
|
||||||
|
<property name="center_pane">0</property>
|
||||||
|
<property name="close_button">1</property>
|
||||||
|
<property name="context_help"></property>
|
||||||
|
<property name="context_menu">1</property>
|
||||||
|
<property name="current"></property>
|
||||||
|
<property name="default">1</property>
|
||||||
|
<property name="default_pane">0</property>
|
||||||
|
<property name="disabled"></property>
|
||||||
|
<property name="dock">Dock</property>
|
||||||
|
<property name="dock_fixed">0</property>
|
||||||
|
<property name="docking">Left</property>
|
||||||
|
<property name="enabled">1</property>
|
||||||
|
<property name="fg"></property>
|
||||||
|
<property name="floatable">1</property>
|
||||||
|
<property name="focus"></property>
|
||||||
|
<property name="font"></property>
|
||||||
|
<property name="gripper">0</property>
|
||||||
|
<property name="hidden">0</property>
|
||||||
|
<property name="id">wxID_ANY</property>
|
||||||
|
<property name="label">Copy to Clipboard</property>
|
||||||
|
<property name="margins"></property>
|
||||||
|
<property name="markup">0</property>
|
||||||
|
<property name="max_size"></property>
|
||||||
|
<property name="maximize_button">0</property>
|
||||||
|
<property name="maximum_size"></property>
|
||||||
|
<property name="min_size"></property>
|
||||||
|
<property name="minimize_button">0</property>
|
||||||
|
<property name="minimum_size"></property>
|
||||||
|
<property name="moveable">1</property>
|
||||||
|
<property name="name">copy_to_clipboard_btn</property>
|
||||||
|
<property name="pane_border">1</property>
|
||||||
|
<property name="pane_position"></property>
|
||||||
|
<property name="pane_size"></property>
|
||||||
|
<property name="permission">protected</property>
|
||||||
|
<property name="pin_button">1</property>
|
||||||
|
<property name="pos"></property>
|
||||||
|
<property name="position"></property>
|
||||||
|
<property name="pressed"></property>
|
||||||
|
<property name="resize">Resizable</property>
|
||||||
|
<property name="show">1</property>
|
||||||
|
<property name="size"></property>
|
||||||
|
<property name="style"></property>
|
||||||
|
<property name="subclass">; ; forward_declare</property>
|
||||||
|
<property name="toolbar_pane">0</property>
|
||||||
|
<property name="tooltip"></property>
|
||||||
|
<property name="validator_data_type"></property>
|
||||||
|
<property name="validator_style">wxFILTER_NONE</property>
|
||||||
|
<property name="validator_type">wxDefaultValidator</property>
|
||||||
|
<property name="validator_variable"></property>
|
||||||
|
<property name="window_extra_style"></property>
|
||||||
|
<property name="window_name"></property>
|
||||||
|
<property name="window_style"></property>
|
||||||
|
<event name="OnButtonClick">on_copy_to_clipboard</event>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</wxFormBuilder_Project>
|
56
espanso-modulo/src/sys/textview/textview_gui.cpp
Normal file
56
espanso-modulo/src/sys/textview/textview_gui.cpp
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
// C++ code generated with wxFormBuilder (version Oct 26 2018)
|
||||||
|
// http://www.wxformbuilder.org/
|
||||||
|
//
|
||||||
|
// PLEASE DO *NOT* EDIT THIS FILE!
|
||||||
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#define _UNICODE
|
||||||
|
|
||||||
|
#include "textview_gui.h"
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
TextViewFrame::TextViewFrame( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxFrame( parent, id, title, pos, size, style )
|
||||||
|
{
|
||||||
|
this->SetSizeHints( wxDefaultSize, wxDefaultSize );
|
||||||
|
this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
|
||||||
|
|
||||||
|
wxBoxSizer* bSizer1;
|
||||||
|
bSizer1 = new wxBoxSizer( wxVERTICAL );
|
||||||
|
|
||||||
|
text_content = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE|wxTE_READONLY );
|
||||||
|
text_content->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_TELETYPE, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, wxEmptyString ) );
|
||||||
|
|
||||||
|
bSizer1->Add( text_content, 1, wxALL|wxEXPAND, 5 );
|
||||||
|
|
||||||
|
wxBoxSizer* bSizer2;
|
||||||
|
bSizer2 = new wxBoxSizer( wxHORIZONTAL );
|
||||||
|
|
||||||
|
|
||||||
|
bSizer2->Add( 0, 0, 1, wxEXPAND, 5 );
|
||||||
|
|
||||||
|
copy_to_clipboard_btn = new wxButton( this, wxID_ANY, wxT("Copy to Clipboard"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
|
||||||
|
copy_to_clipboard_btn->SetDefault();
|
||||||
|
bSizer2->Add( copy_to_clipboard_btn, 0, wxALIGN_CENTER_VERTICAL|wxALL, 10 );
|
||||||
|
|
||||||
|
|
||||||
|
bSizer1->Add( bSizer2, 0, wxEXPAND, 10 );
|
||||||
|
|
||||||
|
|
||||||
|
this->SetSizer( bSizer1 );
|
||||||
|
this->Layout();
|
||||||
|
|
||||||
|
this->Centre( wxBOTH );
|
||||||
|
|
||||||
|
// Connect Events
|
||||||
|
copy_to_clipboard_btn->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( TextViewFrame::on_copy_to_clipboard ), NULL, this );
|
||||||
|
}
|
||||||
|
|
||||||
|
TextViewFrame::~TextViewFrame()
|
||||||
|
{
|
||||||
|
// Disconnect Events
|
||||||
|
copy_to_clipboard_btn->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( TextViewFrame::on_copy_to_clipboard ), NULL, this );
|
||||||
|
|
||||||
|
}
|
50
espanso-modulo/src/sys/textview/textview_gui.h
Normal file
50
espanso-modulo/src/sys/textview/textview_gui.h
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
// C++ code generated with wxFormBuilder (version Oct 26 2018)
|
||||||
|
// http://www.wxformbuilder.org/
|
||||||
|
//
|
||||||
|
// PLEASE DO *NOT* EDIT THIS FILE!
|
||||||
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <wx/artprov.h>
|
||||||
|
#include <wx/xrc/xmlres.h>
|
||||||
|
#include <wx/string.h>
|
||||||
|
#include <wx/textctrl.h>
|
||||||
|
#include <wx/gdicmn.h>
|
||||||
|
#include <wx/font.h>
|
||||||
|
#include <wx/colour.h>
|
||||||
|
#include <wx/settings.h>
|
||||||
|
#include <wx/bitmap.h>
|
||||||
|
#include <wx/image.h>
|
||||||
|
#include <wx/icon.h>
|
||||||
|
#include <wx/button.h>
|
||||||
|
#include <wx/sizer.h>
|
||||||
|
#include <wx/frame.h>
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// Class TextViewFrame
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
class TextViewFrame : public wxFrame
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
|
||||||
|
protected:
|
||||||
|
wxTextCtrl* text_content;
|
||||||
|
wxButton* copy_to_clipboard_btn;
|
||||||
|
|
||||||
|
// Virtual event handlers, overide them in your derived class
|
||||||
|
virtual void on_copy_to_clipboard( wxCommandEvent& event ) { event.Skip(); }
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
TextViewFrame( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxT("TextView"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 895,545 ), long style = wxDEFAULT_FRAME_STYLE|wxTAB_TRAVERSAL );
|
||||||
|
|
||||||
|
~TextViewFrame();
|
||||||
|
|
||||||
|
};
|
||||||
|
|
26
espanso-modulo/src/textview/mod.rs
Normal file
26
espanso-modulo/src/textview/mod.rs
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
/*
|
||||||
|
* This file is part of modulo.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2020-2021 Federico Terzi
|
||||||
|
*
|
||||||
|
* modulo is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* modulo is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with modulo. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
pub use crate::sys::textview::show;
|
||||||
|
|
||||||
|
pub struct TextViewOptions {
|
||||||
|
pub window_icon_path: Option<String>,
|
||||||
|
pub title: String,
|
||||||
|
pub content: String,
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user