mirror of
https://github.com/fltk/fltk.git
synced 2026-02-05 15:59:50 +08:00
* Add classes for application and project * Removed all globals from Fluid.h * Extracting args and project history into their own classes * Moving globals into Application class * Initialize values inside headers for some classes. * Undo functionality wrapped in a class inside Project. * File reader and writer are now linked to a project. * Avoid global project access * Nodes (former Types) will be managed by a new Tree class. * Removed static members (hidden globals) form Node/Fl_Type. * Adding Tree iterator. * Use nullptr instead of 0, NULL, or 0L * Renamed Fl_..._Type to ..._Node, FL_OVERRIDE -> override * Renaming ..._type to ...::prototype * Splitting Widget Panel into multiple files. * Moved callback code into widget panel file. * Cleaning up Fluid_Image -> Image_asset * Moving Fd_Snap_Action into new namespace fld::app::Snap_Action etc. * Moved mergeback into proj folder. * `enum ID` is now `enum class Type`.
62 lines
2.0 KiB
C++
62 lines
2.0 KiB
C++
//
|
|
// External code editor management class for Windows
|
|
//
|
|
// Handles starting and keeping track of an external text editor,
|
|
// including process start, temp file creation/removal, bookkeeping, killing..
|
|
//
|
|
#ifndef _EXTCODEEDITOR_H
|
|
#define _EXTCODEEDITOR_H
|
|
|
|
#include <FL/Fl.H>
|
|
|
|
/* We require at least Windows 2000 (WINVER == 0x0500) for GetFileSizeEx(). */
|
|
/* This must be defined before #include <windows.h> - MinGW doesn't do that. */
|
|
#if !defined(WINVER) || (WINVER < 0x0500)
|
|
# ifdef WINVER
|
|
# undef WINVER
|
|
# endif
|
|
# define WINVER 0x0500
|
|
#endif
|
|
#if !defined(_WIN32_WINNT) || (_WIN32_WINNT < 0x0500)
|
|
# ifdef _WIN32_WINNT
|
|
# undef _WIN32_WINNT
|
|
# endif
|
|
# define _WIN32_WINNT 0x0500
|
|
#endif
|
|
|
|
#include <windows.h> /* CreateFile().. */
|
|
#include <string.h> /* sprintf().. */
|
|
|
|
class ExternalCodeEditor {
|
|
PROCESS_INFORMATION pinfo_; // CreateProcess() handle to running process
|
|
FILETIME file_mtime_; // last modify time of the file (used to determine if file changed)
|
|
LARGE_INTEGER file_size_; // last file size (used to determine if changed)
|
|
const char * filename_; // tmpfilename editor uses
|
|
protected:
|
|
void kill_editor();
|
|
void reap_cleanup();
|
|
const char *create_tmpdir();
|
|
const char *tmp_filename();
|
|
int start_editor(const char *cmd, const char *filename);
|
|
void set_filename(const char *val);
|
|
public:
|
|
ExternalCodeEditor();
|
|
~ExternalCodeEditor();
|
|
int is_editing();
|
|
int reap_editor(DWORD *pid_reaped=nullptr);
|
|
void close_editor();
|
|
const char *filename() { return filename_; }
|
|
int open_editor(const char *editor_cmd, const char *code);
|
|
int handle_changes(const char **code, int force=0);
|
|
int remove_tmpfile();
|
|
// Public static methods
|
|
static void start_update_timer();
|
|
static void stop_update_timer();
|
|
static const char* tmpdir_name();
|
|
static void tmpdir_clear();
|
|
static int editors_open();
|
|
static void set_update_timer_callback(Fl_Timeout_Handler);
|
|
};
|
|
|
|
#endif /*_EXTCODEEDITOR_H */
|