summaryrefslogtreecommitdiff
path: root/fluid/shell_command.h
diff options
context:
space:
mode:
authorMatthias Melcher <github@matthiasm.com>2023-09-26 15:01:03 +0100
committerGitHub <noreply@github.com>2023-09-26 16:01:03 +0200
commit71b8e77935bc9b0a3afc97d322037f2549165d2f (patch)
treea7e5e0cfec35b0ab30d6369d7b9ecd9eb3ddd48b /fluid/shell_command.h
parent2bbdd4946561444fffba2bf047b0926a2cf9f5fe (diff)
FLUID: adds greatly enhanced Shell Commands (#774)
The user can add an arbitrary number of highly configurable shell commands through the setting panel. The commands can be saved as user preferences, inside the .fl file, or exported to an external file. Shell scripts can be limited to individual platforms, can have shortcut keys, etc. . * documentation will follow * support to call `fltk-config` will follow
Diffstat (limited to 'fluid/shell_command.h')
-rw-r--r--fluid/shell_command.h100
1 files changed, 75 insertions, 25 deletions
diff --git a/fluid/shell_command.h b/fluid/shell_command.h
index cfd7b6579..ea39375f2 100644
--- a/fluid/shell_command.h
+++ b/fluid/shell_command.h
@@ -1,7 +1,7 @@
//
// FLUID main entry for the Fast Light Tool Kit (FLTK).
//
-// Copyright 1998-2021 by Bill Spitzak and others.
+// Copyright 1998-2023 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
@@ -17,11 +17,13 @@
#ifndef _FLUID_SHELL_COMMAND_H
#define _FLUID_SHELL_COMMAND_H
-#include <stdio.h>
-#include <stdlib.h>
+#include "fluid.h"
#include <FL/Fl_String.H>
+#include <FL/Enumerations.H>
+#include <stdio.h>
+#include <stdlib.h>
#if defined(_WIN32) && !defined(__CYGWIN__)
# include <direct.h>
# include <windows.h>
@@ -33,29 +35,10 @@
# include <unistd.h>
#endif
-void show_shell_window();
-void do_shell_command(class Fl_Return_Button*, void*);
-
-typedef struct {
- char *command;
- int flags;
-} Shell_Settings;
-
-extern Shell_Settings shell_settings_windows;
-extern Shell_Settings shell_settings_linux;
-extern Shell_Settings shell_settings_macos;
-
-extern Fl_String g_shell_command;
-extern int g_shell_save_fl;
-extern int g_shell_save_code;
-extern int g_shell_save_strings;
-extern int g_shell_use_fl_settings;
-
-void shell_prefs_get();
-void shell_prefs_set();
-void shell_settings_read();
-void shell_settings_write();
+struct Fl_Menu_Item;
+class Fl_Widget;
+void run_shell_command(const Fl_String &cmd, int flags);
class Fl_Process {
public:
@@ -88,4 +71,71 @@ protected:
FILE * _fpt;
};
+class Fd_Shell_Command {
+public:
+ enum { ALWAYS, NEVER, MAC_ONLY, UX_ONLY, WIN_ONLY, MAC_AND_UX_ONLY, USER_ONLY, HOST_ONLY, ENV_ONLY }; // conditions
+ enum { SAVE_PROJECT = 1, SAVE_SOURCECODE = 2, SAVE_STRINGS = 4, SAVE_ALL = 7 }; // flags
+ Fd_Shell_Command();
+ Fd_Shell_Command(const Fd_Shell_Command *rhs);
+ Fd_Shell_Command(const Fl_String &in_name);
+ Fd_Shell_Command(const Fl_String &in_name,
+ const Fl_String &in_label,
+ Fl_Shortcut in_shortcut,
+ Fd_Tool_Store in_storage,
+ int in_condition,
+ const Fl_String &in_condition_data,
+ const Fl_String &in_command,
+ int in_flags);
+ Fl_String name;
+ Fl_String label;
+ Fl_Shortcut shortcut;
+ Fd_Tool_Store storage;
+ int condition; // always, hide, windows only, linux only, mac only, user, machine
+ Fl_String condition_data; // user name, machine name
+ Fl_String command;
+ int flags; // save_project, save_code, save_string, ...
+ Fl_Menu_Item *shell_menu_item_;
+ void run();
+ void read(Fl_Preferences &prefs);
+ void write(Fl_Preferences &prefs, bool save_location = false);
+ void read(class Fd_Project_Reader*);
+ void write(class Fd_Project_Writer*);
+ void update_shell_menu();
+ bool is_active();
+};
+
+class Fd_Shell_Command_List {
+public:
+ Fd_Shell_Command **list;
+ int list_size;
+ int list_capacity;
+ Fl_Menu_Item *shell_menu_;
+public:
+ Fd_Shell_Command_List();
+ ~Fd_Shell_Command_List();
+ Fd_Shell_Command *at(int index) const;
+ void add(Fd_Shell_Command *cmd);
+ void insert(int index, Fd_Shell_Command *cmd);
+ void remove(int index);
+ void clear();
+ void clear(Fd_Tool_Store store);
+// void move_up();
+// void move_down();
+// int load(const Fl_String &filename);
+// int save(const Fl_String &filename);
+ void read(Fl_Preferences &prefs, Fd_Tool_Store storage);
+ void write(Fl_Preferences &prefs, Fd_Tool_Store storage);
+ void read(class Fd_Project_Reader*);
+ void write(class Fd_Project_Writer*);
+ void rebuild_shell_menu();
+ void update_settings_dialog();
+
+ static Fl_Menu_Item default_menu[];
+ static void menu_marker(Fl_Widget*, void*);
+ static void export_selected();
+ static void import_from_file();
+};
+
+extern Fd_Shell_Command_List *g_shell_config;
+
#endif // _FLUID_SHELL_COMMAND_H