From 70bc8d47b39eb524d756920eccc09986961769b5 Mon Sep 17 00:00:00 2001 From: Ray Date: Fri, 17 Aug 2018 20:46:54 +0200 Subject: [PATCH] Remove rGuiLayout tool Moved to own repo: https://github.com/raysan5/rguilayout --- tools/rGuiLayout/README.md | 45 - tools/rGuiLayout/design/codegen_naming.txt | 23 - tools/rGuiLayout/design/lines_quads.png | Bin 43179 -> 0 bytes tools/rGuiLayout/design/lines_tris.png | Bin 43074 -> 0 bytes tools/rGuiLayout/design/tracemap_menus.png | Bin 6372 -> 0 bytes tools/rGuiLayout/design/tracemap_rfxgen.png | Bin 21233 -> 0 bytes .../layouts/generate_code_options.rgl | 35 - .../layouts/generate_code_options_rev2.rgl | 36 - tools/rGuiLayout/layouts/image_edit_tools.rgl | 31 - tools/rGuiLayout/layouts/image_exporter.rgl | 23 - tools/rGuiLayout/layouts/image_info.rgl | 32 - .../rGuiLayout/layouts/image_raw_importer.rgl | 39 - tools/rGuiLayout/layouts/image_resize.rgl | 34 - tools/rGuiLayout/layouts/messagebox.rgl | 19 - .../layouts/raygui_controls_palette.rgl | 37 - tools/rGuiLayout/layouts/rfxgen.rgl | 78 - tools/rGuiLayout/layouts/rguistyler.rgl | 47 - tools/rGuiLayout/layouts/rguistyler_rev2.rgl | 47 - tools/rGuiLayout/layouts/rpbr_left_panel.rgl | 59 - tools/rGuiLayout/layouts/rpbr_right_panel.rgl | 30 - .../layouts/rtexpacker_right_panel.rgl | 47 - tools/rGuiLayout/logo/rguilayout.pdn | Bin 13674 -> 0 bytes tools/rGuiLayout/logo/rguilayout_128x128.png | Bin 1217 -> 0 bytes tools/rGuiLayout/logo/rguilayout_16x16.png | Bin 988 -> 0 bytes tools/rGuiLayout/logo/rguilayout_24x24.png | Bin 1005 -> 0 bytes tools/rGuiLayout/logo/rguilayout_256x256.png | Bin 1538 -> 0 bytes tools/rGuiLayout/logo/rguilayout_32x32.png | Bin 1027 -> 0 bytes tools/rGuiLayout/logo/rguilayout_48x48.png | Bin 1065 -> 0 bytes tools/rGuiLayout/logo/rguilayout_64x64.png | Bin 1100 -> 0 bytes tools/rGuiLayout/logo/rguilayout_96x96.png | Bin 1157 -> 0 bytes tools/rGuiLayout/release/win32/rguilayout.exe | Bin 891904 -> 0 bytes .../screenshots/rguilayout_shot000.png | Bin 37824 -> 0 bytes .../screenshots/rguilayout_shot001.png | Bin 49709 -> 0 bytes .../screenshots/rguilayout_shot002.png | Bin 32090 -> 0 bytes .../screenshots/rguilayout_shot003.png | Bin 36585 -> 0 bytes .../screenshots/rguilayout_shot004.png | Bin 40968 -> 0 bytes .../screenshots/rguilayout_shot005.png | Bin 32654 -> 0 bytes tools/rGuiLayout/src/external/easings.h | 253 - .../rGuiLayout/src/external/tinyfiledialogs.c | 7370 ----------------- .../rGuiLayout/src/external/tinyfiledialogs.h | 325 - tools/rGuiLayout/src/rguilayout.c | 2351 ------ tools/rGuiLayout/src/rguilayout.ico | Bin 104508 -> 0 bytes tools/rGuiLayout/src/rguilayout.rc | 27 - tools/rGuiLayout/src/rguilayout_icon | Bin 105852 -> 0 bytes 44 files changed, 10988 deletions(-) delete mode 100644 tools/rGuiLayout/README.md delete mode 100644 tools/rGuiLayout/design/codegen_naming.txt delete mode 100644 tools/rGuiLayout/design/lines_quads.png delete mode 100644 tools/rGuiLayout/design/lines_tris.png delete mode 100644 tools/rGuiLayout/design/tracemap_menus.png delete mode 100644 tools/rGuiLayout/design/tracemap_rfxgen.png delete mode 100644 tools/rGuiLayout/layouts/generate_code_options.rgl delete mode 100644 tools/rGuiLayout/layouts/generate_code_options_rev2.rgl delete mode 100644 tools/rGuiLayout/layouts/image_edit_tools.rgl delete mode 100644 tools/rGuiLayout/layouts/image_exporter.rgl delete mode 100644 tools/rGuiLayout/layouts/image_info.rgl delete mode 100644 tools/rGuiLayout/layouts/image_raw_importer.rgl delete mode 100644 tools/rGuiLayout/layouts/image_resize.rgl delete mode 100644 tools/rGuiLayout/layouts/messagebox.rgl delete mode 100644 tools/rGuiLayout/layouts/raygui_controls_palette.rgl delete mode 100644 tools/rGuiLayout/layouts/rfxgen.rgl delete mode 100644 tools/rGuiLayout/layouts/rguistyler.rgl delete mode 100644 tools/rGuiLayout/layouts/rguistyler_rev2.rgl delete mode 100644 tools/rGuiLayout/layouts/rpbr_left_panel.rgl delete mode 100644 tools/rGuiLayout/layouts/rpbr_right_panel.rgl delete mode 100644 tools/rGuiLayout/layouts/rtexpacker_right_panel.rgl delete mode 100644 tools/rGuiLayout/logo/rguilayout.pdn delete mode 100644 tools/rGuiLayout/logo/rguilayout_128x128.png delete mode 100644 tools/rGuiLayout/logo/rguilayout_16x16.png delete mode 100644 tools/rGuiLayout/logo/rguilayout_24x24.png delete mode 100644 tools/rGuiLayout/logo/rguilayout_256x256.png delete mode 100644 tools/rGuiLayout/logo/rguilayout_32x32.png delete mode 100644 tools/rGuiLayout/logo/rguilayout_48x48.png delete mode 100644 tools/rGuiLayout/logo/rguilayout_64x64.png delete mode 100644 tools/rGuiLayout/logo/rguilayout_96x96.png delete mode 100644 tools/rGuiLayout/release/win32/rguilayout.exe delete mode 100644 tools/rGuiLayout/screenshots/rguilayout_shot000.png delete mode 100644 tools/rGuiLayout/screenshots/rguilayout_shot001.png delete mode 100644 tools/rGuiLayout/screenshots/rguilayout_shot002.png delete mode 100644 tools/rGuiLayout/screenshots/rguilayout_shot003.png delete mode 100644 tools/rGuiLayout/screenshots/rguilayout_shot004.png delete mode 100644 tools/rGuiLayout/screenshots/rguilayout_shot005.png delete mode 100644 tools/rGuiLayout/src/external/easings.h delete mode 100644 tools/rGuiLayout/src/external/tinyfiledialogs.c delete mode 100644 tools/rGuiLayout/src/external/tinyfiledialogs.h delete mode 100644 tools/rGuiLayout/src/rguilayout.c delete mode 100644 tools/rGuiLayout/src/rguilayout.ico delete mode 100644 tools/rGuiLayout/src/rguilayout.rc delete mode 100644 tools/rGuiLayout/src/rguilayout_icon diff --git a/tools/rGuiLayout/README.md b/tools/rGuiLayout/README.md deleted file mode 100644 index c443933..0000000 --- a/tools/rGuiLayout/README.md +++ /dev/null @@ -1,45 +0,0 @@ - - -# rGuiLayout -A simple and easy-to-use tool to create raygui-based layouts. Useful for fast tools development. The perfect companion for [rGuiStyler](https://github.com/raysan5/raygui/tree/master/tools/rGuiStyler) tool. - -
-
-
-
- -## Features - - - **+25 controls available to define your imgui layout** - - Place controls visually and move/scale them freely - - Snap to grid mode for maximum precission - - Save/Load your layout as **.rgl (text or binary mode)** - - Import **.rgs** files ([rGuiStyler](https://github.com/raysan5/raygui/tree/master/tools/rGuiStyler)) to customize visual style (drag&drop) - - **Export layout directly as plain C code, ready to edit and compile!** - - Multiple code generation options to customize exported code - - Supports image loading to be used as tracemap - - Autovisible right controls panel for quick selection - - Anchors mode support to link your controls - - Controls text edition and name edition (for exported variables) - - **+10 predefined layout available for reference** - - **Completely portable (single file)** - - Free and open source - -## Usage -The tool is pretty intuitive to use, it mostly works with mouse and several key shortcuts that can be seen just pressing TAB key once program is open. Use mouse wheel to select desired control or RightMouseButton to open controls panel. - -You can drag&drop .rgl files for layout loading and also .rgs files (rGuiStyler) for layout style loading. To export created layout as C code, just pres LCTRL+ENTER, you can configure multiple export options to generate the code. - -To compile the code, you need raygui library (single-file header-only) and raylib v2.0 library, not yet released on itch.io but already available for early adopters on raylib GitHub, ready to be compiled. - -## Screenshots - -![rGuiLayout](screenshots/screenshot000.png) - -## License - -rGuiLayout is free and open source software. rGuiLayout source code is licensed under an unmodified zlib/libpng license. Check [LICENSE](LICENSE) for further details. - -Despite being completely free, consider a small donation for the development efforts or contributing to raylib patreon to help the author keep working on free software for games development. - -*Copyright (c) 2017-2018 raylib technologies ([@raysan5](https://twitter.com/raysan5))* diff --git a/tools/rGuiLayout/design/codegen_naming.txt b/tools/rGuiLayout/design/codegen_naming.txt deleted file mode 100644 index 3dce929..0000000 --- a/tools/rGuiLayout/design/codegen_naming.txt +++ /dev/null @@ -1,23 +0,0 @@ -Control | DefaultName | #GenVars | Generated variables (sufixes) ------------------------------------------------------------------------ -WINDOWBOX WindowBox001 1 bool {name}Active -GROUPBOX GroupBox001 0 - -LINE Line001 0 - -PANEL Panel001 0 - -LABEL Label001 0 [!] const char *{name}Text --> Only if defined to be exported -BUTTON Button001 0 [!] void {name}() func -TOGGLE Toggle001 1 bool {name}Active -TOGGLEGROUP ToggleGroup001 3 const char *{name}TextList[], const int {name}Count, int {name}Active -CHECKBOX CheckBox001 1 bool {name}Checked -COMBOBOX ComboBox001 3 const char *{name}TextList[], const int {name}Count, int {name}Active -DROPDOWNBOX DropdownBox001 3 const char *{name}TextList[], const int {name}Count, int {name}Active -SPINNER Spinner001 1 int {name}Value -VALUEBOX ValueBox001 1 int {name}Value -TEXTBOX TextBox001 2 char *{name}Text, int {name}TextSize -SLIDER Slider001 1 float {name}Value, const float {name}MinValue, const float {name}MaxValue -SLIDERBAR SliderBar001 1 float {name}Value, const float {name}MinValue, const float {name}MaxValue -PROGRESSBAR ProgressBar001 1 float {name}Value -STATUSBAR StatusBar 1 char *{name}Text -LISTVIEW ListView001 3 const char *{name}TextList[], const int {name}Count, int {name}Active -COLORPICKER ColorPicker001 1 Color {name}Value -DUMMYREC DummyRec001 0 - diff --git a/tools/rGuiLayout/design/lines_quads.png b/tools/rGuiLayout/design/lines_quads.png deleted file mode 100644 index 94b2195169c4f2b01ff7b5aca273ead18cd6a08d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43179 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 L+nQfDbqf1`MgYY! diff --git a/tools/rGuiLayout/design/lines_tris.png b/tools/rGuiLayout/design/lines_tris.png deleted file mode 100644 index 91027aef82f49cdeb91580d9e044b0af9314c4fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43074 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 diff --git a/tools/rGuiLayout/design/tracemap_menus.png b/tools/rGuiLayout/design/tracemap_menus.png deleted file mode 100644 index fce7cdfeeccf303e9ad308834930e02e19622b11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6372 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 Ov9WU4QEllN{r>=dB?@)` diff --git a/tools/rGuiLayout/layouts/generate_code_options.rgl b/tools/rGuiLayout/layouts/generate_code_options.rgl deleted file mode 100644 index 095fc9b..0000000 --- a/tools/rGuiLayout/layouts/generate_code_options.rgl +++ /dev/null @@ -1,35 +0,0 @@ -# -# rgl text file (v1.0) - raygui layout text file generated using rGuiLayout -# -# Total number of controls: 20 -# Anchor info: a -# Control info: c -# -a 000 0 0 1 -a 001 50 50 1 -a 002 0 0 0 -a 003 0 0 0 -a 004 0 0 0 -a 005 0 0 0 -a 006 0 0 0 -a 007 0 0 0 -c 000 0 generateWindow 0 0 400 225 1 Generate Code Options - layout -c 001 4 lblName 10 35 65 25 1 Name: -c 002 13 toolName 75 35 135 25 1 tool_name -c 003 4 lblVersion 225 35 50 25 1 Version: -c 004 13 toolVersion 275 35 115 25 1 1.2.0-dev -c 005 4 lblWindowSize 10 65 65 25 1 Window size: -c 006 12 width 75 65 60 25 1 File name: -c 007 4 lblx 140 65 10 25 1 x -c 008 12 height 150 65 60 25 1 Untitled -c 009 4 lblCompany 225 65 50 25 1 Company: -c 010 13 company 275 65 115 25 1 raysan5 -c 011 4 lblDescription 10 95 65 25 1 Description: -c 012 13 toolDescription 75 95 315 55 1 tool_description -c 013 8 defineRecs 10 160 15 15 1 Define Rectangles -c 014 8 defineTexts 10 180 15 15 1 Define text const -c 015 8 exportAnchors 140 160 15 15 1 Export anchors -c 016 8 exportAnchor0 140 180 15 15 1 Export anchor 0 -c 017 8 fullComments 140 200 15 15 1 Full comments -c 018 5 GenerateCode 275 185 115 30 1 Generate Code -c 019 8 cropWindow 10 200 15 15 1 Crop to Window diff --git a/tools/rGuiLayout/layouts/generate_code_options_rev2.rgl b/tools/rGuiLayout/layouts/generate_code_options_rev2.rgl deleted file mode 100644 index f93e059..0000000 --- a/tools/rGuiLayout/layouts/generate_code_options_rev2.rgl +++ /dev/null @@ -1,36 +0,0 @@ -# -# rgl text file (v1.0) - raygui layout text file generated using rGuiLayout -# -# Total number of controls: 21 -# Anchor info: a -# Control info: c -# -a 000 0 0 1 -a 001 50 50 1 -a 002 0 0 0 -a 003 0 0 0 -a 004 0 0 0 -a 005 0 0 0 -a 006 0 0 0 -a 007 0 0 0 -c 000 0 generateWindow 0 0 400 225 1 Generate Code Options - layout -c 001 4 lblName 10 35 65 25 1 Name: -c 002 13 toolName 75 35 135 25 1 tool_name -c 003 4 lblVersion 225 35 50 25 1 Version: -c 004 13 toolVersion 275 35 115 25 1 1.2.0-dev -c 005 4 lblWindowSize 10 65 65 25 1 Window size: -c 006 12 width 75 65 60 25 1 File name: -c 007 4 lblx 140 65 10 25 1 x -c 008 12 height 150 65 60 25 1 Untitled -c 009 4 lblCompany 225 65 50 25 1 Company: -c 010 13 company 275 65 115 25 1 raysan5 -c 011 4 lblDescription 10 95 65 25 1 Description: -c 012 13 toolDescription 75 95 315 55 1 tool_description -c 013 8 defineRecs 10 160 15 15 1 Define Rectangles -c 014 8 defineTexts 10 180 15 15 1 Define text const -c 015 8 fullVariables 10 200 15 15 1 Full variables -c 016 8 exportAnchors 140 160 15 15 1 Export anchors -c 017 8 exportAnchor0 140 180 15 15 1 Export anchor 0 -c 018 8 fullComments 140 200 15 15 1 Full comments -c 019 8 cropWindow 275 160 15 15 1 Crop to Window -c 020 5 GenerateCode 275 185 115 30 1 Generate Code diff --git a/tools/rGuiLayout/layouts/image_edit_tools.rgl b/tools/rGuiLayout/layouts/image_edit_tools.rgl deleted file mode 100644 index 9ab9b06..0000000 --- a/tools/rGuiLayout/layouts/image_edit_tools.rgl +++ /dev/null @@ -1,31 +0,0 @@ -# -# rgl text file (v1.0) - raygui layout text file generated using rGuiLayout -# -# Total number of controls: 16 -# Anchor info: a -# Control info: c -# -a 000 0 0 1 -a 001 50 50 1 -a 002 0 0 0 -a 003 0 0 0 -a 004 0 0 0 -a 005 0 0 0 -a 006 0 0 0 -a 007 0 0 0 -c 000 0 editWindow 0 0 170 445 1 Image Edit Tools -c 001 6 flipH 10 35 70 25 1 Flip H -c 002 6 flipV 90 35 70 25 1 Flip V -c 003 5 RotateCCW 10 70 70 25 1 Rotate CCW -c 004 5 RotateCW 90 70 70 25 1 Rotate CW -c 005 5 ImagePOT 10 105 150 25 1 Make Power Of Two -c 006 5 ImageAlphaClear 10 140 150 25 1 Clear Transparent Pixels -c 007 5 ImageCrop 10 175 150 25 1 Crop Transparent Border -c 008 5 ImageAlphaMultiply 10 210 150 25 1 Pre-Multiply Alpha -c 009 5 ImageMipmaps 10 245 150 25 1 Generate Mipmaps -c 010 5 ImageNormalmap 10 280 150 25 1 Generate Normalmap -c 011 5 ImagetDithering 10 315 150 25 1 Compute Dithering -c 012 2 line01 10 340 150 20 1 -c 013 5 ImageResize 10 360 150 25 1 Resize Image -c 014 2 line02 10 385 150 20 1 -c 015 5 ExportImage 10 405 150 25 1 Export Image diff --git a/tools/rGuiLayout/layouts/image_exporter.rgl b/tools/rGuiLayout/layouts/image_exporter.rgl deleted file mode 100644 index b881bc8..0000000 --- a/tools/rGuiLayout/layouts/image_exporter.rgl +++ /dev/null @@ -1,23 +0,0 @@ -# -# rgl text file (v1.0) - raygui layout text file generated using rGuiLayout -# -# Total number of controls: 8 -# Anchor info: a -# Control info: c -# -a 000 0 0 1 -a 001 50 50 1 -a 002 0 0 0 -a 003 0 0 0 -a 004 0 0 0 -a 005 0 0 0 -a 006 0 0 0 -a 007 0 0 0 -c 000 0 exportWindow 0 0 220 190 1 Image Export Options -c 001 4 lblFileFormat 10 35 60 25 1 File format: -c 002 9 fileFormat 80 35 130 25 1 Laser/Shoot -c 003 4 lblPixelFormat 10 70 63 25 1 Pixel format: -c 004 9 pixelFormat 80 70 130 25 1 SAMPLE TEXT -c 005 4 lblFileName 10 105 50 25 1 File name: -c 006 13 fileName 80 105 130 25 1 Untitled -c 007 5 ExportImage 10 145 200 30 1 Export Image diff --git a/tools/rGuiLayout/layouts/image_info.rgl b/tools/rGuiLayout/layouts/image_info.rgl deleted file mode 100644 index da5202b..0000000 --- a/tools/rGuiLayout/layouts/image_info.rgl +++ /dev/null @@ -1,32 +0,0 @@ -# -# rgl text file (v1.0) - raygui layout text file generated using rGuiLayout -# -# Total number of controls: 17 -# Anchor info: a -# Control info: c -# -a 000 0 0 1 -a 001 0 0 0 -a 002 50 50 1 -a 003 0 0 0 -a 004 0 0 0 -a 005 0 0 0 -a 006 0 0 0 -a 007 0 0 0 -c 000 0 infoWindow 0 0 170 245 2 Image Info -c 001 4 lblSize 10 30 80 20 2 Size: -c 002 4 size 95 30 65 20 2 256 x 256 -c 003 4 lblPixelFormat 10 50 80 20 2 Pixel format: -c 004 4 pixelFormat 95 50 65 20 2 R8G8B8A8 -c 005 4 lblDataSize 10 70 80 20 2 Data size: -c 006 4 dataSize 95 70 70 20 2 262144 bytes -c 007 4 lblMipmaps 10 90 80 20 2 Mipmap levels: -c 008 4 mipmaps 95 90 70 20 2 01 -c 009 4 lblScaleFilter 10 110 80 20 2 Scale filter: -c 010 4 scaleFilter 95 110 70 20 2 BILINEAR -c 011 1 groupSelectedPixel 10 145 150 85 2 Selected Pixel -c 012 20 pixelBox 20 155 65 65 2 -c 013 4 compR 100 155 50 20 2 R: 205 -c 014 4 compG 100 170 50 20 2 G: 150 -c 015 4 compB 100 185 50 20 2 B: 80 -c 016 4 compA 100 200 50 20 2 A: 255 diff --git a/tools/rGuiLayout/layouts/image_raw_importer.rgl b/tools/rGuiLayout/layouts/image_raw_importer.rgl deleted file mode 100644 index ebe61a9..0000000 --- a/tools/rGuiLayout/layouts/image_raw_importer.rgl +++ /dev/null @@ -1,39 +0,0 @@ -# -# rgl text file (v1.0) - raygui layout text file generated using rGuiLayout -# -# Total number of controls: 24 -# Anchor info: a -# Control info: c -# -a 000 0 0 1 -a 001 50 50 1 -a 002 0 0 0 -a 003 0 0 0 -a 004 0 0 0 -a 005 0 0 0 -a 006 0 0 0 -a 007 0 0 0 -c 000 0 importWindow 0 0 200 465 1 Image RAW Import Options -c 001 4 lblImportFile 10 30 65 20 1 Import file: -c 002 4 fileName 85 30 75 20 1 Untitled.raw -c 003 4 lblFileSize 10 50 65 20 1 File size: -c 004 4 fileSize 85 50 75 20 1 2132421 bytes -c 005 1 resolutionBox 10 85 180 80 1 Resolution -c 006 4 lblWidth 20 100 33 25 1 Width: -c 007 12 width 60 100 80 25 1 SAMPLE TEXT -c 008 4 lblPixels 145 100 30 25 1 pixels -c 009 4 lblHeight 20 130 33 25 1 Height: -c 010 12 height 60 130 80 25 1 SAMPLE TEXT -c 011 4 lblPixels 145 130 30 25 1 pixels -c 012 1 pixelFormatBox 10 180 180 160 1 Pixel Format -c 013 9 pixelFormat 20 195 160 25 1 SAMPLE TEXT -c 014 2 line 20 220 160 20 1 -c 015 4 lblChannels 20 235 50 20 1 Channels: -c 016 7 channels 20 255 159 25 1 Bit Depth: -c 017 4 lblBitDepth 20 285 50 20 1 Bit Depth: -c 018 7 bitDepth 20 305 159 25 1 Bit Depth: -c 019 1 headerBox 10 355 180 50 1 Header -c 020 4 lblSize 25 370 27 25 1 Size: -c 021 12 headerSize 55 370 85 25 1 SAMPLE TEXT -c 022 4 lblBytes 145 370 30 25 1 bytes -c 023 5 ImportRAW 10 420 180 30 1 Import RAW diff --git a/tools/rGuiLayout/layouts/image_resize.rgl b/tools/rGuiLayout/layouts/image_resize.rgl deleted file mode 100644 index 6132a5d..0000000 --- a/tools/rGuiLayout/layouts/image_resize.rgl +++ /dev/null @@ -1,34 +0,0 @@ -# -# rgl text file (v1.0) - raygui layout text file generated using rGuiLayout -# -# Total number of controls: 19 -# Anchor info: a -# Control info: c -# -a 000 0 0 1 -a 001 50 50 1 -a 002 205 160 1 -a 003 0 0 0 -a 004 0 0 0 -a 005 0 0 0 -a 006 0 0 0 -a 007 0 0 0 -c 000 0 resizeWindow 0 0 220 210 1 Image Resize Options -c 001 4 lblResize 10 35 60 25 1 Resize: -c 002 12 width 75 35 60 25 1 -c 003 4 lblx 140 35 15 25 1 x -c 004 12 height 150 35 60 25 1 -c 005 4 lblAlgorythm 10 70 65 25 1 Algorythm: -c 006 9 algorythm 75 70 135 25 1 -c 007 8 lockAspect 20 110 15 15 1 Lock Aspect Ratio -c 008 8 canvasResize 20 135 15 15 1 Canvas Resize -c 009 8 checkTopLeft 0 0 15 15 2 -c 010 8 checkTop 14 0 15 15 2 -c 011 8 checkTopRight 28 0 15 15 2 -c 012 8 checkLeft 0 14 15 15 2 -c 013 8 checkCenter 14 14 15 15 2 -c 014 8 checkRight 28 14 15 15 2 -c 015 8 checkBottomLeft 0 28 15 15 2 -c 016 8 checkBottom 14 28 15 15 2 -c 017 8 checkBottomRight 28 28 15 15 2 -c 018 5 ResizeImage 10 165 200 30 1 Resize Image diff --git a/tools/rGuiLayout/layouts/messagebox.rgl b/tools/rGuiLayout/layouts/messagebox.rgl deleted file mode 100644 index f20f026..0000000 --- a/tools/rGuiLayout/layouts/messagebox.rgl +++ /dev/null @@ -1,19 +0,0 @@ -# -# rgl text file (v1.0) - raygui layout text file generated using rGuiLayout -# -# Total number of controls: 4 -# Anchor info: a -# Control info: c -# -a 000 0 0 1 -a 001 225 175 1 -a 002 0 0 0 -a 003 0 0 0 -a 004 0 0 0 -a 005 0 0 0 -a 006 0 0 0 -a 007 0 0 0 -c 000 0 messageWindow 0 0 325 125 1 rGuiLayout - GuiMessageBox -c 001 4 lblMsg01 35 40 255 25 1 Are you ready to create the most amazing tools? -c 002 5 SureButton 25 75 120 30 1 Sure! -c 003 5 ContinueButton 180 75 120 30 1 Continue! diff --git a/tools/rGuiLayout/layouts/raygui_controls_palette.rgl b/tools/rGuiLayout/layouts/raygui_controls_palette.rgl deleted file mode 100644 index c7f2242..0000000 --- a/tools/rGuiLayout/layouts/raygui_controls_palette.rgl +++ /dev/null @@ -1,37 +0,0 @@ -# -# rgl text file (v1.0) - raygui layout text file generated using rGuiLayout -# -# Total number of controls: 22 -# Anchor info: a -# Control info: c -# -a 000 0 0 1 -a 001 100 50 1 -a 002 0 0 0 -a 003 0 0 0 -a 004 0 0 0 -a 005 0 0 0 -a 006 0 0 0 -a 007 0 0 0 -c 000 3 controlsPanel -10 -10 150 865 1 -c 001 0 WindowBox 0 0 130 50 1 WindowBox -c 002 1 GroupBox 0 60 130 30 1 GroupBox -c 003 2 Line 0 95 130 20 1 -c 004 3 Panel 0 120 130 35 1 -c 005 4 Label 0 160 131 25 1 Label (SAMPLE TEXT) -c 006 5 Button 0 190 130 30 1 Button -c 007 6 Toggle 0 230 90 25 1 Toggle -c 008 8 CheckBox 105 235 15 15 1 -c 009 7 ToggleGroup 0 265 130 25 1 -c 010 9 ComboBox 0 300 130 25 1 -c 011 10 DropdownBox 0 335 130 25 1 -c 012 11 Spinner 0 370 130 25 1 -c 013 12 ValueBox 0 405 130 25 1 -c 014 13 TextBox 0 440 130 25 1 TextBox -c 015 14 Slider 0 475 130 15 1 -c 016 15 SliderBar 0 500 130 15 1 -c 017 16 ProgressBar 0 525 130 15 1 -c 018 17 StatusBar 0 550 130 25 1 StatusBar -c 019 18 ListView 0 585 130 75 1 -c 020 19 ColorPicker 0 670 100 100 1 -c 021 20 DummyRec 0 810 130 30 1 DummyRec diff --git a/tools/rGuiLayout/layouts/rfxgen.rgl b/tools/rGuiLayout/layouts/rfxgen.rgl deleted file mode 100644 index f480e66..0000000 --- a/tools/rGuiLayout/layouts/rfxgen.rgl +++ /dev/null @@ -1,78 +0,0 @@ -# -# rgl text file (v1.0) - raygui layout text file generated using rGuiLayout -# -# Total number of controls: 63 -# Anchor info: a -# Control info: c -# -a 000 0 0 1 -a 001 50 50 1 -a 002 165 90 1 -a 003 0 0 0 -a 004 0 0 0 -a 005 0 0 0 -a 006 0 0 0 -a 007 0 0 0 -c 000 20 version 25 15 80 20 1 Version -c 001 5 PickupCoin 10 45 95 20 1 Pickup/Coin -c 002 5 LaserShoot 10 70 95 20 1 Laser/Shoot -c 003 5 Explosion 10 95 95 20 1 Explosion -c 004 5 Powerup 10 120 95 20 1 Powerup -c 005 5 HitHurt 10 145 95 20 1 Hit/Hurt -c 006 5 Jump 10 170 95 20 1 Jump -c 007 5 BlipSelect 10 195 95 20 1 Blip/Select -c 008 4 lblInfo01 15 235 90 20 1 based on sfxr by -c 009 4 lblInfo02 10 248 98 20 1 Tomas Pettersson -c 010 4 lblInfo03 20 280 85 20 1 www.github.com/ -c 011 4 lblInfo04 20 295 85 20 1 raysan5/raygui -c 012 4 lblInfo05 20 320 85 20 1 www.github.com/ -c 013 4 lblInfo06 20 335 85 20 1 raysan5/raylib -c 014 5 Mutate 10 365 95 20 1 Mutate -c 015 5 Randomize 10 390 95 20 1 Randomize -c 016 7 waveType 115 15 265 20 1 -c 017 6 screenSize 440 65 95 20 0 Screen Size x2 -c 018 4 lblVolume 390 45 95 20 1 VOLUME: 60% -c 019 15 volume 390 65 95 10 1 -c 020 5 PlaySound 390 81 95 20 1 Play Sound -c 021 8 playOnChange 390 115 10 10 1 Play on change -c 022 4 lblPoweredBy 390 135 80 20 1 powered by -c 023 20 logo 390 153 95 95 1 LOGO -c 024 4 lblRaylibDotCom 405 250 70 20 1 www.raylib.com -c 025 5 LoadSound 390 280 95 20 1 Load Sound -c 026 5 SaveSound 390 305 95 20 1 Save Sound -c 027 9 sampleRate 390 340 95 20 1 -c 028 9 sampleSize 390 364 95 20 1 -c 029 5 ExportWav 390 389 95 20 1 Export Wav -c 030 1 GroupBox098 0 0 265 71 2 -c 031 1 GroupBox099 0 70 265 96 2 -c 032 1 GroupBox100 0 165 265 36 2 -c 033 1 GroupBox102 0 200 265 36 2 -c 034 1 GroupBox101 0 235 265 21 2 -c 035 1 GroupBox104 0 255 265 36 2 -c 036 1 GroupBox103 0 290 265 85 2 -c 037 15 attackTime 125 10 100 10 2 ATTACK TIME -c 038 15 sustainTime 125 25 100 10 2 SUSTAIN TIME -c 039 15 sustainPunch 125 40 100 10 2 SUSTAIN PUNCH -c 040 15 decayTime 125 55 100 10 2 DECAY TIME -c 041 15 startFrequency 125 75 100 10 2 START FREQUENCY -c 042 15 minFrequency 125 90 100 10 2 MIN FREQUENCY -c 043 15 slide 125 105 100 10 2 SLIDE -c 044 15 deltaSlide 125 120 100 10 2 DELTA SLIDE -c 045 15 vibratoDepth 125 135 100 10 2 VIBRATO DEPTH -c 046 15 vibratoSpeed 125 150 100 10 2 VIBRATO SPEED -c 047 15 changeAmount 125 170 100 10 2 CHANGE AMOUNT -c 048 15 changeSpeed 125 185 100 10 2 CHANGE SPEED -c 049 15 squareDuty 125 205 100 10 2 SQUARE DUTY -c 050 15 dutySweep 125 220 100 10 2 DUTY SWEEP -c 051 15 repeatSpeed 125 240 100 10 2 REPEAT SPEED -c 052 15 phaserOffset 125 260 100 10 2 PHASER OFFSET -c 053 15 phaserSweep 125 275 100 10 2 PHASER SWEEP -c 054 15 lpfCutoff 125 295 100 10 2 LPF CUTOFF -c 055 15 lpfCutoffSweep 125 310 100 10 2 LPF CUTOFF SWEEP -c 056 15 lpfResonance 125 325 100 10 2 LPF RESONANCE -c 057 15 hpfCutoff 125 340 100 10 2 HPF CUTOFF -c 058 15 hpfCutoffSweep 125 355 100 10 2 HPF CUTOFF SWEEP -c 059 20 Wave 10 420 475 50 1 WAVE -c 060 17 soundInfo 0 480 201 20 1 SOUND INFO: Num samples: -c 061 17 duration 200 480 126 20 1 Duration -c 062 17 waveSize 325 480 175 20 1 Wave size diff --git a/tools/rGuiLayout/layouts/rguistyler.rgl b/tools/rGuiLayout/layouts/rguistyler.rgl deleted file mode 100644 index e6d1d77..0000000 --- a/tools/rGuiLayout/layouts/rguistyler.rgl +++ /dev/null @@ -1,47 +0,0 @@ -# -# rgl text file (v1.0) - raygui layout text file generated using rGuiLayout -# -# Total number of controls: 32 -# Anchor info: a -# Control info: c -# -a 000 0 0 1 -a 001 50 50 1 -a 002 395 90 1 -a 003 0 0 0 -a 004 0 0 0 -a 005 0 0 0 -a 006 0 0 0 -a 007 0 0 0 -c 000 17 StatusBar002 0 0 720 24 1 CHOSE CONTROL > -c 001 18 ListView000 10 40 140 560 1 -c 002 18 ListView001 155 40 180 560 1 -c 003 0 WindowBox004 0 0 365 560 2 Sample raygui controls -c 004 4 Label007 10 35 65 25 2 rGuiStyler -c 005 4 Label008 90 35 145 25 2 github.com/raysan5/raygui -c 006 5 Button006 240 35 115 25 2 Load Style -c 007 6 Toggle009 10 70 65 30 2 toggle -c 008 7 ToggleGroup010 90 70 265 30 2 -c 009 14 Slider011 10 110 345 20 2 -c 010 15 SliderBar012 10 140 345 20 2 -c 011 16 ProgressBar013 10 170 320 20 2 -c 012 8 CheckBox014 335 170 20 20 2 -c 013 11 Spinner015 10 200 150 30 2 -c 014 13 TextBox016 175 200 180 30 2 custom_style.rgs -c 015 9 ComboBox017 10 240 150 30 2 -c 016 5 Button005 175 240 180 30 2 Save Style -c 017 19 ColorPicker018 10 280 240 240 2 -c 018 1 GroupBox019 290 285 65 75 2 RGBA -c 019 4 Label023 300 290 20 20 2 R: -c 020 4 Label024 300 305 20 20 2 G: -c 021 4 Label025 300 320 20 20 2 B: -c 022 4 Label026 300 335 20 20 2 A: -c 023 1 GroupBox020 290 370 65 60 2 HSV -c 024 4 Label027 300 375 8 20 2 H: -c 025 17 StatusBar003 0 616 150 24 1 BASE STYLE: LIGHT -c 026 20 DummyRec021 290 440 65 80 2 Panel -c 027 13 TextBox022 290 530 65 20 2 AABBCCDD -c 028 4 Label028 300 405 19 20 2 V: -c 029 4 Label029 300 390 18 20 2 S: -c 030 17 StatusBar030 149 616 186 24 1 CHANGED PROPERTIES: 77 -c 031 17 StatusBar031 334 616 386 24 1 EDITION TIME: 02:45:30 diff --git a/tools/rGuiLayout/layouts/rguistyler_rev2.rgl b/tools/rGuiLayout/layouts/rguistyler_rev2.rgl deleted file mode 100644 index 331bf9e..0000000 --- a/tools/rGuiLayout/layouts/rguistyler_rev2.rgl +++ /dev/null @@ -1,47 +0,0 @@ -# -# rgl text file (v1.0) - raygui layout text file generated using rGuiLayout -# -# Total number of controls: 32 -# Anchor info: a -# Control info: c -# -a 000 0 0 1 -a 001 50 50 1 -a 002 395 90 1 -a 003 0 0 0 -a 004 0 0 0 -a 005 0 0 0 -a 006 0 0 0 -a 007 0 0 0 -c 000 17 StatusBar002 0 0 720 24 1 CHOSE CONTROL > -c 001 18 ListView000 10 40 140 560 1 -c 002 18 ListView001 155 40 180 560 1 -c 003 0 WindowBox004 0 0 365 560 2 Sample raygui controls -c 004 4 Label007 10 35 65 25 2 rGuiStyler -c 005 4 Label008 85 35 145 25 2 github.com/raysan5/raygui -c 006 8 CheckBox014 270 38 20 20 2 DISABLED -c 007 6 Toggle009 10 70 65 30 2 toggle -c 008 7 ToggleGroup010 85 70 270 30 2 -c 009 14 Slider011 75 115 250 15 2 SLIDER -c 010 15 SliderBar012 75 140 250 15 2 SLIDERBAR -c 011 16 ProgressBar013 10 165 315 15 2 -c 012 9 ComboBox017 10 195 110 30 2 -c 013 10 DropdownBox032 125 195 110 30 2 -c 014 11 Spinner015 240 195 115 30 2 -c 015 13 TextBox016 10 240 180 30 2 custom_style.rgs -c 016 5 Button005 195 240 160 30 2 Save Style -c 017 2 Line031 10 275 345 20 2 -c 018 19 ColorPicker018 10 300 240 240 2 -c 019 1 GroupBox019 290 300 65 55 2 RGBA -c 020 4 Label023 300 305 20 20 2 R: -c 021 4 Label024 300 320 20 20 2 G: -c 022 4 Label025 300 335 20 20 2 B: -c 023 1 GroupBox020 290 365 65 55 2 HSV -c 024 4 Label027 300 370 20 20 2 H: -c 025 4 Label029 300 385 20 20 2 S: -c 026 4 Label028 300 400 20 20 2 V: -c 027 20 DummyRec021 290 430 65 80 2 Panel -c 028 13 TextBox022 290 520 65 20 2 AABBCCDD -c 029 17 StatusBar003 0 616 150 24 1 BASE STYLE: LIGHT -c 030 17 StatusBar030 149 616 186 24 1 CHANGED PROPERTIES: 77 -c 031 17 StatusBar031 334 616 386 24 1 EDITION TIME: 02:45:30 diff --git a/tools/rGuiLayout/layouts/rpbr_left_panel.rgl b/tools/rGuiLayout/layouts/rpbr_left_panel.rgl deleted file mode 100644 index 610a1ae..0000000 --- a/tools/rGuiLayout/layouts/rpbr_left_panel.rgl +++ /dev/null @@ -1,59 +0,0 @@ -# -# rgl text file (v1.0) - raygui layout text file generated using rGuiLayout -# -# Total number of controls: 44 -# Anchor info: a -# Control info: c -# -a 000 0 0 1 -a 001 50 25 1 -a 002 60 215 1 -a 003 60 400 1 -a 004 60 480 1 -a 005 60 575 1 -a 006 0 0 0 -a 007 0 0 0 -c 000 17 StatusBar000 0 0 210 25 1 SCENE SETTINGS -c 001 3 Panel063 50 50 210 775 0 -c 002 1 GroupBox010 10 40 190 135 1 Render Settings -c 003 4 Label002 20 50 80 25 1 Render Mode: -c 004 9 ComboBox001 95 50 95 25 1 -c 005 14 Slider003 90 85 80 10 1 World scale: -c 006 8 CheckBox007 20 105 10 10 1 -c 007 15 SliderBar004 90 105 80 10 1 Wireframe -c 008 4 Label008 20 120 86 20 1 Render elements: -c 009 7 ToggleGroup009 20 138 170 25 1 -c 010 1 GroupBox016 0 0 190 170 2 Environment -c 011 20 DummyRec011 10 10 170 110 2 -c 012 14 Slider013 60 130 90 10 2 Parallax: -c 013 15 SliderBar014 60 150 90 10 2 Blurry: -c 014 1 GroupBox020 0 0 190 65 3 Camera -c 015 7 ToggleGroup017 10 13 170 25 3 -c 016 15 SliderBar019 45 45 105 10 3 FOV: -c 017 1 GroupBox033 0 0 190 80 4 Lights -c 018 8 CheckBox024 10 15 10 10 4 Key -c 019 15 SliderBar027 55 15 90 10 4 -c 020 20 DummyRec030 150 10 30 20 4 - -c 021 8 CheckBox025 10 35 10 10 4 Fill -c 022 15 SliderBar028 55 35 90 10 4 -c 023 20 DummyRec031 150 30 30 20 4 - -c 024 8 CheckBox026 10 55 10 10 4 Back -c 025 15 SliderBar029 55 55 90 10 4 -c 026 20 DummyRec032 150 50 30 20 4 - -c 027 1 GroupBox062 0 0 190 240 5 Postpro FX -c 028 8 CheckBox034 10 15 10 10 5 Antialiasing (FXAAv3) -c 029 8 CheckBox035 10 35 10 10 5 Bloom: -c 030 8 CheckBox036 10 55 10 10 5 Vignette: -c 031 8 CheckBox037 10 75 10 10 5 DOF: -c 032 8 CheckBox038 10 95 10 10 5 Grain: -c 033 8 CheckBox039 10 115 10 10 5 Color correction: -c 034 15 SliderBar046 75 35 80 10 5 -c 035 15 SliderBar047 75 55 80 10 5 -c 036 15 SliderBar048 75 95 80 10 5 -c 037 14 Slider049 75 75 80 10 5 -c 038 14 Slider054 55 145 100 10 5 Sat: -c 039 14 Slider055 55 160 100 10 5 Lum: -c 040 15 SliderBar056 60 180 95 10 5 Bright: -c 041 15 SliderBar057 60 200 95 10 5 Contrast: -c 042 15 SliderBar058 60 220 95 10 5 Gamma: -c 043 14 Slider048 55 130 100 10 5 Hue: diff --git a/tools/rGuiLayout/layouts/rpbr_right_panel.rgl b/tools/rGuiLayout/layouts/rpbr_right_panel.rgl deleted file mode 100644 index 1d5e3d9..0000000 --- a/tools/rGuiLayout/layouts/rpbr_right_panel.rgl +++ /dev/null @@ -1,30 +0,0 @@ -# -# rgl text file (v1.0) - raygui layout text file generated using rGuiLayout -# -# Total number of controls: 15 -# Anchor info: a -# Control info: c -# -a 000 0 0 1 -a 001 50 50 1 -a 002 60 460 1 -a 003 60 645 1 -a 004 60 275 1 -a 005 0 0 0 -a 006 0 0 0 -a 007 0 0 0 -c 000 17 StatusBar008 0 0 170 30 1 MATERIAL MAPS -c 001 3 Panel014 50 80 170 745 0 -c 002 1 GroupBox013 10 40 150 170 1 Albedo -c 003 20 DummyRec000 20 50 130 130 1 -c 004 4 Label004 40 185 55 20 1 Color Tint: -c 005 20 DummyRec012 100 185 50 20 1 col -c 006 1 GroupBox009 0 0 150 170 4 Normals -c 007 20 DummyRec001 10 10 130 130 4 -c 008 15 sldrNormal 10 150 100 10 4 -c 009 1 GroupBox010 0 0 150 170 2 Metalness -c 010 20 DummyRec002 10 10 130 130 2 -c 011 15 sldrMetalness 10 150 100 10 2 -c 012 1 GroupBox011 0 0 150 170 3 Roughness -c 013 20 DummyRec003 10 10 130 130 3 -c 014 15 sldrRoughness 10 150 100 10 3 diff --git a/tools/rGuiLayout/layouts/rtexpacker_right_panel.rgl b/tools/rGuiLayout/layouts/rtexpacker_right_panel.rgl deleted file mode 100644 index 954f671..0000000 --- a/tools/rGuiLayout/layouts/rtexpacker_right_panel.rgl +++ /dev/null @@ -1,47 +0,0 @@ -# -# rgl text file (v1.0) - raygui layout text file generated using rGuiLayout -# -# Total number of controls: 32 -# Anchor info: a -# Control info: c -# -a 000 0 0 1 -a 001 0 0 0 -a 002 60 90 1 -a 003 60 280 1 -a 004 60 440 1 -a 005 50 50 1 -a 006 0 0 0 -a 007 0 0 0 -c 000 0 WindowBox033 0 0 230 575 5 ATLAS SETTINGS -c 001 1 GroupPacking 0 0 210 175 2 Packing -c 002 4 lblAlgorythm 10 15 60 25 2 Algorythm: -c 003 9 algorythm 70 15 130 25 2 -c 004 4 lblHeuristics 10 50 60 25 2 Heuristics: -c 005 9 heuristics 70 50 130 25 2 -c 006 4 lblPadding 10 85 60 25 2 Padding: -c 007 11 padding 70 85 130 25 2 -c 008 8 trimSprites 10 125 15 15 2 Trim sprites -c 009 8 allowRotation 110 125 15 15 2 Allow rotation -c 010 8 removeDups 10 150 15 15 2 Detect Duplicates and use Alias -c 011 1 GroupTexture 0 0 210 145 3 Texture -c 012 4 lblSize 10 15 30 25 3 Size: -c 013 12 width 55 15 65 25 3 -c 014 4 lblx 125 15 10 25 3 x -c 015 12 height 135 15 65 25 3 -c 016 8 forcePOT 10 50 15 15 3 Force POT -c 017 8 clearAlpha 10 75 15 15 3 Alpha Clear -c 018 8 forceSquared 105 50 15 15 3 Force Square -c 019 5 ExportImage 10 105 190 30 3 Export Image -c 020 1 GroupFont 0 0 210 170 4 Font -c 021 4 lblCharHeight 10 10 100 25 4 Char size (Height): -c 022 4 lblPixels 170 10 31 25 4 pixels -c 023 4 lblCharRange 10 35 100 25 4 Characters Range: -c 024 11 minChar 10 60 85 25 4 -c 025 4 lblto 100 60 15 25 4 to -c 026 11 maxChar 115 60 85 25 4 -c 027 5 ImportCharset 10 95 190 25 4 Import Charset -c 028 8 generateSDF 10 140 15 15 4 Generate SDF -c 029 12 charHeight 115 10 50 25 4 -c 030 8 CheckBox032 105 75 15 15 3 Alpha Premult. -c 031 11 Spinner033 115 135 85 25 4 diff --git a/tools/rGuiLayout/logo/rguilayout.pdn b/tools/rGuiLayout/logo/rguilayout.pdn deleted file mode 100644 index d38b430e4bd6994d4712a63fb0ff1bc31c5417cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13674 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 diff --git a/tools/rGuiLayout/logo/rguilayout_24x24.png b/tools/rGuiLayout/logo/rguilayout_24x24.png deleted file mode 100644 index 3fa5020c529d212cedd1217a22e32ed6f0f46757..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1005 zcmaJ=OK1~87+!o)TPjtw)cP7WiWjr5G)c2`Teg|RM!Kb>k;a42&F-{Wn%!ATGZK zU^l}sy}1dPr}IEKx^~b%KJ@4*oeq;sk<8$EQq?`gs3tBUkhAp#lt;Q*yYvo?Fw9P1 z6^f*&P09wgIX%R1f$dT@!;Fjtu5K(M0!nDXauoLGiLDcahEd_{t!?RpsVF!eYdI>KPg{4lnQn1~&tm8M!L<`0T zy33245T?`uYTEyyw%tbiB#*ZJ{!`d5)Lg{pk&l-=gI?TxBn;)sX%FcHdj*Uuttw8J zF~NQryC6Li2eX!A;;P?3Ynq&Me4;xB%0Y#te9p2=c{rAdOIcw&3t>VOGl^lCQnT6Q zkeWygOX^Uv#f8{dvXMhtTyvY7?#K-r!FFk6h&<~uGP54GK_g+=>g*-eQLo80J9|+( za(QZo53lvFYi=FU-U*lOrlp&9+arhex<{LO^j72meGoG8$qw^s(2S69w0 z?;bz@>+?+;zP%IqL_R!JAMCk42q)K1t)2c_JF@ZS-s=lp-%mcPy!ydT-tYUkxi(Q5 z*iR1ji0j}=|J`d9xkr7!>0AB3%QsGJ?AqHm#~j^v{1{j7{uVyKTxJSB8K1lQ2c!i( A2LJ#7 diff --git a/tools/rGuiLayout/logo/rguilayout_256x256.png b/tools/rGuiLayout/logo/rguilayout_256x256.png deleted file mode 100644 index b63bc0e299026f623d49b49fd24b950ec2cf7eda..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1538 zcmb_cTWAwm7(R(D-gkrhWEDJ4QE+jtF-bcnZ8Xzr)U-7X*zLpObmpWT>dYBuPR*oV z2#R-oa`$x=eG;Kh-av{LAH0BC*nO(F2)+oqD?W($BA$tz7|{rV^Kx$A_x<00VUG9p zY+AgaWdQ(Sadxwk2OvbZAuumYm%k&OB3+h}t^v}Ii=?DF2yD>t5Q14#9Y%Si>gC<{ zP!fPS&?pR$f!sD(!zQQt7|t_o$_60W>Dj6_iU=G+!-kb&UfsCKKtoS4J7PH@XJ^oe zv3cA<{o_3aZG2Q~*O|@^nDk^SU?QSI&)j9XvX^42x-#AS*E|EO5Hgx#KAIZH^}!5w z5R7pGs|j%d#zjtyu1h2mYoR2F0xw9sD6wKfj!Lp1z}b(X(Hy-f=auf+SoD-)MhLNG zo-dV3Tq(+7XP6h;+uMB&Nn$C2b;}k}J=Stt0|f=Snq%0+z!vls)ge4aQVezaF$L4E z$y)AgnP|ayPqlfG6a16{U@rGhX_ z!A=3=T|pK5Mliwd2)1FSKL&RgmX1qq6`jk;S<5A=rJ<~nVkn<83|)?kF|j);uIpBm zxF~kT+uDRgmyl`8B&19{5zho%1#4p_vPi(yKXGFXx&9!SHjS(x$Jm4PZU>vNny_p% z_98XZo8{__y+j*wd1{9D+gjJ=;EK+UzpV`|J=De?S#;JNI@J7<`+oos_Oi-`f;aQ> ziTKmObR@k!w)|wP4O{k34E1V{rjnIrwYgM$J2`k^<-4WQ)SLJFCh_#8qgyK=4Iqes zd7ue|K`1!tiRJrmCr?kbsO*bkIJm8WzQEUBzN+@UuV2LbA*%KH)usBq=IUh{aU+## zVW-bdtvZH(yLRGiNAI)$-@ZF=dVau;oMQX7l&^8CgUY8@T}>aJ*xPaE$epI357#T~ zv~k|V4`=$XO#Uf_?1fELw5BZ?qAJY*3A5}zTBJroOSqp zd9dg5new2#=5Et1Hqs~oc=7hlxzGPwp$MVIwXakr+T{w zx+#k4O{b(R*@3qXcaZ?3M|7ifT~{Qwcg@nE4#DLpy%$to&VV?wAqX;@Pvt@! z2=NT>4}`t*KBMcJ7?wDHMBw?PB!zfB5sLBtNIV<} z24aa&fR6>5TnVWa1Dd$W)%LkUTdp?oytc!E4)h$b+b*rC840DLlCR^yc#IrM2bl zrGt|ff49hdl76mXb#_g=73|pB!ip#?P2QHUB`-@}Z8tBn z?;(O93~`FWc2F7fJa-U=AfB8|K@>zmL_MfSPvT40b~{)DFYmoSzu)iw`4;+myBix? z8YqftjQ0phva|Mb)RO<(L4AvCM{qQQQ)me1MH5nC8D$}eYvM3WLQx(cdjUHrY9CP3 z8JtO+=Ov`ML>uEOXa-?ZR7YpQ5Ty}_K^6|HdWinH@stLt9HIw&2{vIwprZCnm@qZb zo0cXK0!J(M4UJoNY5hgCYcvgy@~1GKoGAK_&z~7weQ* zKMVYvi}QE`fxsEyW;vE&-3;e;asl4s=2;e$KALzlz!v%vuTf^;k5`@zl*Rfb|>Q-x6L4cNIss>h(4s1m+i*h(blSp?`(2R<#Zk5VJ z3dR&fgW+7Pol+T?NcKOHg+*P0aUnz#zDreQKH!VSI4-{`X2(8OhL&6^V-IyQ>n0iMLm#fB$%D8T7sBbnyX@+v^_wDF zb80qRS9fzrX%Eue=T~A8g5OJ(!9e^X@TizPH*o9xv=a z_hhpPKFeR5>vz0Tgu$MfrnPj}_SoU(N4F;5eEYnkh^i` z;ye?cO*=ll{3SHkuPnAKFWmlpdU?fr)H(OnLDe3hQf`pCI=}tHe!TH$udvoNIQbWz CBwC>W diff --git a/tools/rGuiLayout/logo/rguilayout_64x64.png b/tools/rGuiLayout/logo/rguilayout_64x64.png deleted file mode 100644 index 02054c60db8477136907c602f0b2ffda1d0359bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1100 zcmaJ=TWHfz7>Kf#6APs}I&d&W-Q;{_p?Ke?~hycC{>7 zwS=OmmdtJ`OXha(Up$|T8=I#`$+Qxu3OI*~xUATaifgC`f{dZ`!Yov@p~1&6LQxBV zo-g2nyjN6_!6+VvaSe;GDJl|kEk*5z81%qi-Hg&Rf!1qe(PdD~eeuU5!O{QMwOfOJvz{xy+RP z46=J!J{%5v8iL>>2%j@#V#W2DPFqbuf{tqI7S@poJVm7km2i|MPJgFhSan&`sg{Wp zjCB=@aeTrb5YlN$3i5m^80V#s zByd4Ko|ck)Fka(ING%!A#5Jx~=lZ#ZT(1!fi$s>7tsj9}+C~PbBrNKUy+{r9s$8w1 z7a`S<%MvrJcddV2bM1)qj<>8gE!ouD9-5@rZPL_N&MezU9>hdOis#+epI*sJPjIb^ zp1t@|SQDRl@bFI8;MLXN-ZsmVt(PWe+l~49 zZ#g(;&)jUSJgAVV~0jAe&-)N|7g8Asb-fydU9mbvn{iS-|b)VzWd(XQs1`g z=U0fi9|sP0E}S|Q+cb7|d+bj4=)}wR;`q^VqbD(zKVEPazRukkx&8Fq#O2mw{H?E3 e*XC2D51a2(Klg0FO-y>s3!X`JNY@gFPW%E@T4gW* diff --git a/tools/rGuiLayout/logo/rguilayout_96x96.png b/tools/rGuiLayout/logo/rguilayout_96x96.png deleted file mode 100644 index 16980b91501a09ce2a0384ee6bc88be98620aa82..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1157 zcmaJ>Uq}=|99}ia3?m{6O=wz$qP*MPThH?rPrbW6^Qt@S?m*viZ+G-o-JNZB>{clf zg-U{o9x{T+hln1;=ph3Yq?aIwdJPfkr9udO@umOGo_7}1wXie$`|bCAzi(!KyOUk< z<5iV4l@vu)MLWd=nR}hPqLhrB zW(uL9!Y+1Y5Jpx886ceWf^Jn;P}a(!V=*DBTUgR%7!?CF;k#8;5qO^Cc;4e-BOx!x zMVkGM9o`5R=J}8}6!JBS1+IwXVGZiIz*T;8`J!B>5j2BT7NM!0gGz^qG>}`cpcePS z7S+phmEvBwqFjcUVVqpqdfg;VeYGZqhc^+FMnF$ zc8$01F7M)Muh!Y%!02omh1Z`Q$#gc2-3)F&zf^zd5OYt;%ncm;9{FHJsEXa7eIz+G zwf6J_^3Q)fIkA`?qe@D*RotM+Kwgq)k2B<=lD|{!rFm3oeF5d9rqTUZKd-!>Y}i?S zeYP6y@IUXExb}8h^}Yn*jn^O#7zhs}|0@n|~N|3gDSXZ{im()Z`rQy&D`Wq1INx|tuQ diff --git a/tools/rGuiLayout/release/win32/rguilayout.exe b/tools/rGuiLayout/release/win32/rguilayout.exe deleted file mode 100644 index 882641e204bc63492274c5f48c43b3aa72b6b7e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 891904 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ۥlBMJ-ds&Yf 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�=^DY#gO^VscRg_~w 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�yQv^?c3#Zgpr^z%fVa-V@agwD{vD&)v%N&z_L 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%0AC3==eS(fSxHPfpJ(^ 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 g{aj;8I7IH+~YBey-avzD%mgGRq#zU9`d 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�MkT;~=LDsi>qxmhdHKD=CfkyDa5?$ZhNcGv(ts;zwy!SC`1aRyzDcO#!P86J(tCMh;Q5 z)&~`)m1?o{;l&r#682J+G>JjaTOB>}=Nq8350CW{tb1Wql=iZ!Dhi5EyFo*6f}X_MaI~%0>fHK z1_~?{ PRHM6ofFXCp7=A*shXW^^}3kjB(lHsCn074VvdKNAe5TLUc8!kkbUUZY+-~OT<`t$6gea_B=Kd zvSR*Wm0~axi^t!=m?0el$dUR;?Fc_;=_hsD;-!O!(d^3nN`iia2cSd>sX}sHR67abh;7msq+q#R)GF@fXe|_09FEex{gEqZxH_*#Qz%c zuLSK?fU5zk0ILDl0D8J6P~MU6YeBOHa2??Hfa?J_0R8~D5zx~$5%Ir8+Bbn_E#PLr zEr44Aw*l4xZU^*qbwJKvLuPk?Wt$@b>j{}|n^mKg<*=D#OKu_1Vi2o|WUjyt0ybgE+@Mpjtz?*=# z06ksbA^zJ4e+Td`;61?mfW3eZ03QNA0`zo!3)$~O_+J1Y13m$K3iu50SHRx@p96Zj z_B!p-{~-MDfc=02fG+@F0=@zq1atw+uJ53C+tFUS5&kvc8^E`K?*RV*d=L01;0J*D z#oNCXeLx@d0d}R{RgeP#$dfLR-$o?#!(vomx2C5z(s(I0b~pGbPYjV8iQ#3 zCp$xHGidFAp5oK^O=A$*9Ez=AW&`vTpT=*p9mq!L%?9WxK8?RLev^&Rn+?!Y{If}J z$UE5xz1aXg#s7|EhxlY8^kxI}6raZ5Z5TtyM(E8B=qWypzlx2}n;pVfh8=*Hl zpr`m`dnq;*;$`w!tqM|E(DJ z=^xDjVgbF`0cLslFYdn*_^$;1GbIpyOX_dK;6KndP+82;7X*G$17l)`ruR9#U`Ai} zSx20daemyO!YgmS@5z3{GAj=pSsQpI{;1(uAB_0o=)uPvJM!eDT9lDbKUQ6 zx%IYnx8Je;k9Xexz^2U)KD6cGN1ocgu>yd&zo<3_|d+>KSmAw79$ERyf#I38feZS@A4P>5!Ah5PXvOB6ndUmMTJv53Zr#0V_bSC zo@VjPX#X#8WVO<)mlo~lnaYy{p#5+<_(1VHu;cj%0F`wDAQyl|QOu|L{<=2qc;Jcw zBohiJ86O2W9zc9&11bQta7yx}un_>FcLACKtc1uQ)irb?myj z&u(2^e`Ch-x9zuWd8gxq&tBiV{LNRd9aa8dzsHu`cW&R&TRyq+_$OA@Cq8uim-5E> zlg@hhtM>{XUv|#!w~qbWzIU5vY~FqF*$ZD=I%|#Zh;8c^)Gz+F_Me|W@40mP>6Srn z`ufz>w&WxZ+T^(Ew^-c%#?p#IN;R-#Uc@V>K7-27mlb^D&UDRcLhPj7j?Z+q6a(qWgc?|04M zHTDl49WejA(Rs~r*ZS(Ow47e|@xd7j7Sy_ZL-wS3E}SOSe)&JE`}odYXF2Z4gK-zk z-f>vhGjDG6RDAZ(;eXxo_+?9$Km7gs$G=-!Hu|k2zgqIz3Qzg&f6Q^;KlM*DHctpi zTW|d^?a|!@>)xOI=hb`ins>Z%+dmGz@!I^)yhY!?*^*VVyz%Z`TjsqL93A8O%kj3% zn)3KNpIT=V>! z$tSJZwQKR%EI!{lk$X-;P;&)H}h$6Y4%%HnDz{V}A31^{35Woba-J-yg#Lu0Hu5DgM42`<~;v z`mh79-Wqpt)0dVLet4>n_l()KU%%Ms={zgjcg!b!7PKrpZubv+N4<8*X^Y=V+&TH( zM*sT{fBWtJ$1g8>{Gp>?zkK7oPj7wWjdQPl<>nnv?a8V9^8M*wG(P%D~|5c}L8Wl7Dfz$5@|M{u(mv?Qx z?8Y}!j=$%-@I(tDCKV?9=ZCXSV%s7dG|{95Gvpy-9KtFK*D_~Gs^zIou?rk15|o%qsG zkDotx^rLc z!}zs-e|5m0tCz-1d+Gt(c=yQ0JH9?@-ma;o-m5NsQ{HKh2JYmz#m-pX(-21Vo{cgW?G_`+=#cH+LVq#)r z`}FDCH!iMUzxeosg#P^pz;TGy4QS>Ni#cpRcoGf7?!i#>ItB2eI$wGcanDC|i_H>a z>0^nr^tU8h23urHnkC;dPwFJ@{G##8ipz#81{b;AQ3&VV2i)VpKOTMY0Qf2mL|=O} z)*Mbm-!}?<=0x}*${tIl0;X(;awzP}|oX*^~55PyD}e}`0b zZ_UQz9vuC`hVP%?43c-9{N?b^e*Z@${r)EotUBqEGv83&Utap?0}J22@OJJWB1w;| z8ee?(3HQCcitW_teLsj}r*E3H);mqA$SuJ)82mF@5Bv3Kj0rf36(5EKl9Fk=i1u|y z1d~QI;+vC3{K$P0J}1N1oOyV`;8+l7Y@_3E4@KC8I0qA8Mp+cskG{*v$5x**B#D z4?7@*oxGETV?>o$*t@0!AK;V_46<|1@oBvmhtbg9sGL+?KE0|6Y2)}yI>EUIstQ3R zNuTzaBK7S%MH&up0hR#P0;Zxoi$*WX&XNPz-1p*3r3QR>27iPJ@lpXlOV1OID>?#+kFEvg@z#jr1B^LX_ znj8@L(eM^jiTTKTf{EX>06|cqErf_Dyeb=(||v!6Rs;DJ9b3 zfPBDAz`n^P(nbK`p;hNeSW&_Qw64<`Jd5x10~e++dMDokdf0d2p z0<`BKtdxKhlDr6Okz}a>{fbxe0b7rLCLaGP5blS)5(F#Vwb{}k|mr&15T8;X2vf%zwlM?lO@%O za+5qd&%=*>igL4ek`Lh#u1vqS!4K{I0=&Nrkno8P9S7baxm%Ka#BX<2oZG|fGYeLa*nW6%=dUL?vk^hkk+vzcP%YnNonaBnSA{RVeF!Qi@qOVYcd>V@|T~kC`rTf zdElx1o___uFW=7Z^S@#D&Sk08|4X|LuVeRRf4-L8JukgPce!S*wGj7D7fu>S_ghvS z+l+huUv5ad1^1OF?AZDS?pY(d7W6NYI`@w2*j`X1t=)6s?5u@F(sR=qo1eU^NXol% z-o7~>6y>kj+NYgfD+_sHB4Mg9%-NqwH9Zrl74=^xz^yLt1Lt4q4Rb$(`>o-;M$ z__S{)ExO>e+$VzPy*vHLHuK1|))ABz!m=kDAQfXi^|i1}aUh=fLG~K{?XgtT7=`K~ zZcUA^4kyRJR}-I-*U*ndOFEQPT2zD&ti9Pe*`r(iL2vu$`bF+Q!{~r#Ax?cRY{RFo zxIdCw{94m|LX^ZVK zQVMX?GNdmKhU>|oDzL|0Xe}EMTXM1OqL`(zwri~M+Y6p4c(&ka zF`ePSQ92tD??f(}IO{qlo7wnVmaqVSixVUnG}L*m?>ZPx;&g+o?=ay_#or=Y%O&~I z8tJC)gW;!DSryp(Uu-L|Cteg&U>~$Jw#eRTu^nZNw+|}VZci+D#@@f+S$kZ;)ApF@ z3APoMXf)6JHtmThgw5GZTumkuj`{9AfC@Q^`7Tf7Ill00GZ2c%7 zMTUG7B-jR<<dOOD=gC>g)}d=BF&4aj7wvR>=mREDA{(D>=~5oSyC|T z^*|vZ4T{^+YrtzqTvs@jl+}dS#})%G)CK9rF2uVbzAOBd$iqdHhov?q-9@qS_WnpL z4(XF}=Yw7Xe_vu(cs`9NW^$Th-)ONV#+b-s3Y9wx-~x{|$99G1ndTMMT4~jn8*y?0 zOF+MENLTowIJ_Wjk=GLYN~`UB)Qpy22x9B4d{KB0K8% zaH?aIy8IRrG{gS@T{Ds+9VC%Lx|`A!Ue=QiPqOc|+Ri4vMjfWEgz;!a-10G9;kcgi zTw>p5u~nPtCF4PQwh252XLp5*sl74XC{gun8k)dns78rSr>sR$C`6?;DWMM-GOjB; zPVl;r^yOmci_$J<*wd`jP$DqYwaUVTMiXp7!Z{|`vII6~^dYSSNGn#PCF;A_USa(Q zT7XbY-Y2gC?e3he@QrF2^=)aDMXyq%hdU7`e?nKdo65!HqK(sOvEF59GolT|psmDB z>lkTr2+Nw?6~0-tQ*GbENY6$S)pagq3Dm~+BHji! zbhbY)o7%>pWoJ`=poo1+g6$$|bILnPMq{JgN0Pp8?h1FB)qbodqAYRPcc8R^yYD?*BB2U&IQ`z4E59!jb@ZEad zE>U%R63KYAX?q`ps6)_3TQBPhFUK>+mI~`KdkpolS->}a@{e%+hj?LmD;*F!RgC-l zb2I~R0UP%zx^aA!fur$tE%?(~2Iqru+_ls;Z#y#@BpK*@z&g-SU1(_<1r7122iymm zBrQ!nAKxi_8Q|d_!exZr26z(Tw5O>}qeYX(a|qfEn%`+@te3DvD2-1k>WZ%LVqN$` z7A^x9hdQ_(;WV?1q;av$I-gre#3KbXe+A7mS{mz9Y8o`YuKZnB*slxch785`A^d%W zvxPiXFOaA8MK%5kgkOGnSD3!5R`alk1+%)?fbc&eoMydhxOKi7e<#AfM!2pFR=*nl zIl?Dj(G@;P8~@A*|Nd6={Rj_e!>ui9{1k-Wi15|A@GI5ua)ckTvManq7v8Rh`w;F& z_zSx5XVmZ&2tVe^t}vTBtMchk!#5y&A;R;u@t3e*CZC-MzXstI+Hh;R8vk>IKZEdD zy6{Rhyg$aR?-6dMBdq=rKI^KU!^;uA5#g*os`+20^7kQp@YOwsuRwSw!k^UT?=dz0 z280h?)fK*97k-Z#z7ydOAe?kr)el>Yg$OABpCkPG)yDd}LXF=aeR<+FUEy+F{7Gv3 z6oltq+ZDc77k-x-UXJh=*K~!i)8%iq%HM}@*L4{Gbn(AbbZzu4+wO!$Fbny?e_%d)5&vi5U2*^Q=kABg%#P;;FkkN3U6EPm$ zeOp(!RGUZic{Ybd^fnlCK$io$o$I>72ef%1Uhl`KyiNzrnmfC~(~P`|BfO|ymVxf^ zySl=;cvkbpyC$aBw;}wkUcz@Eyc^*|wCUIet8(3k@Gm!Xg)i0ew_c>mH3s9*>32uQ z&vb zqFD}_X`8yjPiy5#G>>q3lAJbxX8#t@;8~TE^+`1!I}yI>;jS>-=~dfbn1xf_eva@( zk936xY4cf%x{Zs}2hk0}_*wU8SNJT|28KK+FP^@9FaQnF(Oug| zrK9n<9&{%^k9=v%Rwl;duWXTNIB1D}73ja)*%f|ED=&rqg=qR6pucSw`UNxkTlDlK z$Ah3Bxf}YT&5v!c+KvXrNzzGsdhUm^5WXGZCu-BP9cLp!6aQ+2KlOH3xEB4bDi_ zYyGGzJVlMi<`NM*nk@axVX+x!N5u)}nqV`B&#O>@N7GGb7^HGk;}U#8Y?RQy(3hS^d9 zCbFB&r-vlh)4_MwXTl!D49o-LpQa=s;6DYPOnAI4>cvK2mPaRsUK`?J<<@ZqVfXwJSV|)5witU5f0P3g9ORywzooNy2js5?v1b zjf98%)HQ|*>ot)H1Ye&?1MT;qWou7ZUt0j)RDY9zAN04b@biL4)SQdfavqDWKPu-k z#9fcL$5C8dgj)mLCg9K&vx{(K&uj#a=2vu4S+@bV0XW*bggp9tMOpU%zrzH70Qh%+ zKatbRvju$|+UC9pK5nkS%fNpQJhSOhUbn#K03Y)?#y!p_&054|UjckB@W%W!0bdRL zP?66w1fNdeeJ1p4fL{iD8K=*;7TaS;1{;Cj3jAS&$3?guz-`gsNG^MT+Z5p&r^w|1 z@H9Lmk**RS8Tju_=yQM{^gn9;;wXPK=dA#~9QbSSjQWVP2C!;~l_lck zL)b2aDSBBa(pU!kr@$N2z5#gY@96h9FImy=O~B^>ucaqBkUdiYJd-irNw@a`=L7Cq z;sM=Wii)bRVyPnzomPx1!NVWeIMN@=wimRDy%uQ)wnnsabt+v51*G!if_~lsF@K@5 zqA?J@8u%^13*CrQbi)Vy0pQP|yb%4V_81wDWY6S$(G{*EyvSpk^$d|S-tK9=U|BCT zB>SD9*#(;4qn(347AP%{FxQb!5mx>ftv^1S!fediG8cZHlM9eP#Fee zjNZ}J6+Rx%lviYx=~^1_JAn@o9vAT;dnTtFb}IOR&rYjte=H?TVe=3+KMa_*K-KVvUZ2d@l2Nt zp!I@Q;Pw+QCRZ#)T5KO%gk*_E!q}c0)2+_oNI%l7KAr4`gJ#W-&`bi&LC~}kPqhx` zt9&SrKG5XHc85!d1{am76SyV7-9r^sV&7x6-4R3bp*pw$VTtkGeEwTx&#}J9^<@+A z&jFvPmaE9#YKvEj#p3P(&8CFz@Jrx>`pdCCZ)f)U0pNZ8yTjY#fEO~^WwYhRi55YN zl9boM2p@E0w_4AHO98GEIP#~ai}IKc+zQ~>92}xsgv`sp&jEfD@b}fb5|K(_ z0?{l1P5x2cVH$rUG(V^^BmQealX7%7-y5O*oImh3wgvbdz|R2JEl8aPcj!WIAF29pb-Hp!;pUHPmb>n|3GO7Uh}N)sbs_} zA2cZ^K%Ufw1Wko)2)YZ_!LT)689_~;+bws8pVgGL(_(wlB1%iVR)D7Sr0($J8k$yH zgTf1|efo||{$V5wLeOXPC(%S=?+eUPUzsIwhFKf3dTT1VHN^hiSPeKl8A7hjR zvCPZrcsLA|Ehl$}Zy{dPZ{5hpqFmrBlDc(vOa*Y|z$rRXfhcrh#~k49hVCiyUTd+= zS2Jw=SUi>_*dBnLB}8XkE*=Zn{+%jNYByWJbJLja@N0NRy8*kM)NGi|x*K8bY2AFE zi!G)mph#@{kF~jj6rSE4UQ2Odmsx3N3pGVLo`^Dkk1%u{>>}K7;JyK_zrc}R<^XpP zxD3Ko+2u2lI?+}DKO`eUOSpRA1_MXMr;Bjyzzs6ctpF}jLze`)wZQcUZmOoP=V7iY zBvX{IfJ-YMv^znYmf0O1N(rDoqinDe`$ntn8ru6YTI@_uDOw^5IiyHmr^A68Y{2CJ zH^_i12QCpfw(baC6@YobRMj1(`5Ex?9Oxd=?*u*#cxu~(p9ehY&_3WN0q-L`Yv*8w4RO|>CMV2S zItAj92*<${pw;e;6Fv#}O$Odn-hAM90qa1_4@xE;Wy;+gU`U*x$H_;(C= z;=2a;gBl)$+W_1F;7FC|BEH*z``i$p@OyxdsqPME6Cu)T5$PQOJ_Yz!IKI{Tl0AmT zkT@9B2Z8^A>=g61gT00ONl~NQjxA`82P^8U>cM->obK>_=x@UOhU=VxS=Ua-u)K zJM4jsb@ba}Y;PxM=rJFlGA;qVys|s|5yoS+j5gcpT3dwVcN^$FUDF+Q;~6qav(DiC z^)kF}Ls;&0-Qlewk0yN{cE+wZ>kCQ~Y^$(i7FD0{7TIfphP%LU+Tt=+e-YagnuJMu z=Z9?DX0e=JViURc88k@r%gA_>e1?EJA&7Owj8uqi}6ppPfDsnt-bYu97g5jlMMUB14wgn$iu3(}_4#7o;aq@~6IFPIQaR z0r?)p-GsO&3%ybI$zdrzr|F7dWz5j(9K{`k#=8E2?(jfk+>I9N)4I6lYNN8US0L_+ zO|U&F&$y5csUEmBz>OdTs#dWTmjJ&J_!9_^i)dE@w-vbIga9qA6Ol~U1HT)1?Kry? zxLv@}5J4Bw?E-EmaLQU5)z?1Y_5fEwMBrJC-k~hP$J#c8H$@+WXD}Ya@JfRP5hC~QI2!d!g!KVPf7Whm- z?-%qg;GY9No8!|0qRvhS{s8dW{;(Ce&wJ&mWe0^vEJlZg%_v+RTMw}|DFl|zK1I4pdseTW)P zy0TM*D|Q~?_5!lNlgu-^@&N|{lpiJ!luJK0$Pkatm8Ar|WFm^A`nFJ+a?r-h!J`V# zyxeM;yh@qU5Ht^T%RqNtG~Ma;!H@v|tIELzx>bm?3vs^D&wV2MCuEI1j-jGtJGwv3 zP=RfQBQ16pg7LK#>|^j*{z!NDB9XQzCrYz4W)fDkn(WIhG3@1D*6XiGkM+6I{rMwuM_3f)(wE?%4!|Gw0mrJkN8U zbDrnCpL?$I>tp+sUz<5_f{)1Da5?1xU#%CBL#!LaeT(R!!fEBiW(UE&XvplYZ3qEm z?Ah29ZeHzi!vW~3|1~w2Z-m!TU=_gR{IS@7h8G}nr)_x($g9>$i%){;L`-3%?=+m{@&m!Wu-Ex)jU_z4c4T_B=r1Xb0p|Uz-kJk?qe~9=BiBGjrTE>J|AZhDl9sejaVmI7Pyk#+o&zzz$*ube~e^!;f)63t?z7pB$>#a?6`zwYSc$@e+@92;1K z@or1mIQk}jAGrI$-RR&tbzbK+#Mm^grKpN}+segJm4Eo0fsdYJ#NiiVedRo`7dyPS zg>I5DOik1tny4}=1?M6-or1$pcr5_d{M8gMfi(ha_rThL^#PkJg!}|=5ZF#&Ou5ug zV6u+C$AF3b3>{h|@EAy(@?9eTlMqCQ|DQHhZn`XoE4nRD#+$mpXX?ES6$z-7T zVP{{2bfoS&J$jw8(LTE)5jo4jtpK-JWa1}j)d5=otV#gTr`jtPC+Y0fy9N$!0^AmG zmu29}gp)#dkmJM;gS#EvItN$PpU^^E7+_LQj)HRloHw~Rb+PzBO5QWXpCDfAT=Fmq z>=ZDXLiLmSP)vt?5?Gf&Qh5l~Vhu{9MKbcWg_Cp_fIs_dj@>XpPW2A9j#m?3O8mpp z@AH#(uMgOnV?JvqGI4hcN*aPxL5RHjpgRYhnTNx`Mm?|-z#?By$2$Y8!~+`zHpc@i zMxmu1SR7cn2UZTO0+^~V$R_gD0b30WPyIw+t9fV!_AP->o~q7n3oqpqeP}gX3RMJd z^!PVB&)N{gKvzS)4_>F>CGWKu^?*j#S-WqH4TVE*SA&nC@aEVk+=s%wv9rqWcl;$j zW0FeMF3e=DyWyLuHc;y799jPcruHaRoxrYcb%p@WIBGk1)!?;&_gcnNhHSJ=?!Lm2 zqMO(!m$U!Pv4ae{j}+bLJlA>P;pa$4LXO6q-VvTpCx1jdfyEqFp?a(y3JQ+#dVGk{A&h{9$4!oV< zjX8KeeQ;xFsSE)cnO|irhSoAXX&`Q8td9Td)W02upR#}W&-+%Y-} zIB*HC1u%vriMgc0qBH6CifQ#4szP zt5Oe;NEtQ4BXZ*Lg~A}q&;LOrpg*yV{3uTA(A25U=;V}})jYBTo2v*J;w??Eni ztfbz^DXw+eq-tq2bW=Lhru}m zj+)zGdiENWjY*VR$B+D1s@;)#`RY?%Crl* z?a(O$;qHl>hvz~4}LdQe^TaYiGX8H8EY z8E5YY-Czx@MYAZuSv==o&5MNhW8m%rH|g+pY>3Vy6Uv88B6rp49`>W{7$+IVvv=F40Tc7sdUYnl~u#4tD~!or%Kt5axoW0 z^#F;jHp#;=(rfscb2cSa&q(h!gNz<4jis5~!f0pA?MqZ&HivcYJ-$56Vyv2gXH6Q< zICA#E^9(#YopMoaX}hC$Y(sE%gH!hZCdQF<{H>GVoC4?ABslWX%~@wBPHQeWEtBBX zfwO-SoNjPNC%}<@V;4BpKX=X<=yoQw$SI)e=vKF4ph;Cl7DlCCJ_g-6=+ry<(3$y;R8o%?*&2cZ3UM!Fn^ag(i! zvU~16NnyspZ-KV`SC1!mI<%hkA9c=SJ2)r65jmybL9-D#D=dB5FmV@%`?4&~pjW4D zO3iy%qm9aew~Y3;Dk|fr)6ge=>-0nPAQTj%s~h=W6s;y+F84Z0{HTP}+6^qt&5e4U z+Z|gj@zi*cyAD2EAD?>pN;|L}+OmZGM)r|T;{@DHGILygy&Ik`oO6mY^{sM<;=C{ z_7w0vz~3wI%r*f9rwP3zN`IXOSsYb-=3+>vgZZenP;-^O#)px}(+!`}i-GdUzMILW z&WDYvQwQPG2OrUuXl5qmrd&VF!iad1-ONa+Ff8dIet;XcVr{BiJSy^#9o z<*!G0yj4CMocZ7s|30(MN*mrpTp4lu2>X;fqnxz1QjGyiLEQ=6KIo)Qq}N5WL931m z?jdl`fqPp9uJreM7HGeBen#Z^gR{3!`yxBPqK}Kf=L7G_;K4xEEfoei##4Qi4GlN0 zM)f__Y?`;g=bj8cx2ZYCO=%Rp#?z9tbuKB_UGO>xFLgJ>3hBo}Ka(|}IC1-l+m~d2 zA;N>S`e$gyxTR$kQ&<_Ow*x)_&V}$uvdF2sDZR^)A6M}DG{xHunl=i1Koj&t8ZyS5 z|EH|aM@C%xQZ|^f5ecD$h-y>B9y`H5Zs4cnn%o}uLVF(CX85@Fo=QvgZ^yuycUelF zsql})S+{^Th(FO*DStb`(YEO~ZfgMNzVm`aU>6--S5IBb?!8rxa%o!7> zW&IiTbrPJp;0#ZKQwPqu32?*)y1|)0bHtsOs4<$XhaQ+6x+AumwEzN@v0WMtOZ65Y# z8|6&~1}*h!4t(Wa*1S~0lmFMpRxgURB-Hl)b+IOBuTvb> zE67R}ULNot`hh}%1!Q%U676%^PUAuu)Mh{#Ay#R^nplf{7U=?cYkc-d@*j%GsDE7= zDhj4^)$4Fzr z^GED+qLi81zZ`Jtfb1^F>MydC;4XmM2ku`HmY=kVGha%74(#iWjH&)p-Zyf`4cB_c z4WWmPNEts$AKC=3_*Emx7drEq^!#!f|HTYg(lWI$dW#2A8Rbww8cwA;mwf=(YixYR2xOv1i5SFpit@e^K)XbKs^|FRkOvBj>&f|hZ8K%nM zc8n$_2jkp=sEyvNU~e&CRnZkG1XxH~E%1!IXe9Z0ho@N<)Bs*3mvv1BGiiCHS@%F> zATZ}^^Wz^()naXBBSzcyIDx)EmIej-Wl)sFA?@vdPFY&Qw z8J5aoh-tD_QSb7|B3Ua)!y(BE4@j*~N*V4YJu7}`%24!t0e*e(`xRkt`$C`Jrp}#( zZk2|r!m9@=w@1v{Xc=tkUXK0z*@!!rQ2lMEHZrFtf>ec=LkZ1RXzHdwBYociXtqOh z7h#cIr9)Nmq)0gk)7iXWpI5exFse@(}VX1RlRE=Ra z<7P4&d0KrH6Lcqm zYAr4S{yFgXfxp;kmommVoV&6Qt=*yyZQ1|p)UmWRu?55;dq!ocR6`kWcf5!*q;hbv zgml{xcIfI6_Z{+Czy^Ws1h$YcFL|joi#Wkuz>fmoA#klxI%9ecsWbRCDYG@XtfL7uuJbb$45Majd0R4J~do#v%i<4c%goOWJgSG9Isw z-mYTe@T+(Q`g`e!dpCjI(bz+-Drer>4$dxc>P22!yA5gx!1+k*fa?#`H=%Zba~Pc4 z)B7KG9wcQ-R~Ju zK&ssjRj7W`AdtFH4*qHIS4w`;?9ScbbS0KXOv=3zn&Ov@B;{OfI!#&^%AmtuGvKIs ztay==?fPiw*GiC8>R)W&5d2R4#fW7aRJ(v zc_YcM!AE3KeUg1Hiu-45(NQyt6B9f^x&T+fLf#p8)jGUVW!I$*(k%-)NbWv>FZmdP z{sQ#x&7h~YyU1!q&3%#!SGR+I7}~m5j3l2MRG(F2zJUKF>L@BN@W_K*#Y0>4F;qb7 z<#cSt8g=;Cj$WZqX|OZudrkCO6=(CTMviKX;`A#=($7t}_ua+^JsrliQ7?p!RqSvl zd_`q=t-&e3rv3(dMu6x~^`W<2$(K;3z_dY1a+#frnG4nD=N9Y*L%^zmU8W$+%kXyts{p3Qp&9)Y6V_Ggh)`E-L2ayY zlR8$UcALH3kQzgY&d$Q~96Y}y=^&pE&x#O7@O;c2?PWk!e?Ruf@g~X=ZRet= zv(WB@_7*cejxDGiM4D{ zYaF5bW6ia(mbcmu?}#-*M*|~oHw>zWx7cqwc$lzn*^C^+$g%fzj4y)Q_!hZp*=zW9 zQCW8KLKj9iDY@->b`jo#uV?HT#GA8fSB7@Qj$FxEwJUkY)((W17x}QJrd2R@X?!j9 z_l+aTduAZKe?1#2S|96^)st4+yEe8}o?2pq;w`hEZi)>qjulCi-WJl?rZ)T>7&ZjFt!&R$pY zn_yCgTPe2PucJSz97zs4V?p1xit}d~>b*89lgJEkgEZP1PzF^W%7jYWF^hpoN!5sb zAC}Xvl+bHb)1XUyIq`Ag**;Qp7H5p5)($1UX_ENF1o6@*>~`W~!k?e;+y`t9Y0~9M znkD3jmkgJxG==6E@e7E*LgM)e>=dy122A*z2UZU320@Yqh^6RW`biqjt$<2iPy0-~ zyx%AGn_lnZAr@HEI`_J$cil`ay{6$TmSx>ENKJGAh`A0Y4G&F}wTtx2t5ahO)u*pg zLp6>$IX(Dos$*Yowr|Iv+X>wS?VIdJG4rOc#*Ko182k%_C7+T`*?Kk1Xp!-P`{Izi z`Xoyh?xft2F3s^7qRLJjjur_2+9+iOSc zd#!2kdBQ-Ox$rnMd*HGV6T=_ z+)*t@=6E&8eU$Ykmb zX=6`8EuDvN3)xLxIO-7gI1TtmVtw4(UesZ;3ngM(rM(RQ8~D;-hW^9GyH%$fa_H`~ z86#>R?l7{K-ZbLg)8;F?L(*tVQtvd>O*X@o_Tv%=rF-rR+J1Jt{Ex?ZgM^u5wS*l{I+J5(1;)jSoLwu_pUqRm{%WkSY znhR{0`0~{w`r9jIa*zuKp&Hv$FM~CLcMQCFH#_S{)MwY;N+578s?xK2FB4pv1+})o z0%__&wS{xuM84qpPREA5b;vu>sge6D(&|v=Nf4IeJveO9co|XF(th7Z`pvhDB&B@i zC$Iy++JRlEAoNxEM}f5fd!@iAYuRPdH7XXS;H3^|2Vr`;uWk< zAlofQKICAu(~8p#J1sl$pjwUm&21S;{(x|LIWAKr#0%h*7O#r)-=+Sgc=h^Low^fe zH$0BOgC#L_N1DDvazF5sz}dc0KdB!_Dv%GDwE3cY`#oLzpL{V!VC{*hv*68ZWu6&e z%WPn!S?;w_=^@M>TAdnCgV6DKaH`drx~59nVbVG!GG&Y*c%xg?MSm-0Z+GP!ZcF1_ z8Et~}KKOL59Z9~$k=e&C%0g_wWVBU_qgYx7RLyN>!}kJwceQ2i6G{ClS;+b-anB_z zKe6?>z>WZWu>d^pxg7vhP5cSsAC)CxRxx;Vp3YM z!C8mFrnt<2^+fw$8s&htb!Hjewx?FpPUU$3ltwfcwFjm-=T&obETgy;Mo z#yXC^ReLMzl4YU)QA@_5E~l!nItjkCGe@9F^o}IQ30v36c$E>FTy!;)Pt#!i>;S8~ zctp47z^&^`>GrtLR5M-&woDkNY*oFBPr{s1NUIi=(KaPXB38=FG(`69M&6S7daq8s?``X*+`pF)utxliWWbeO7+fc$nb~SL_p6Yrbar21V;S)DVTpe-8iTjFU zyYBd-Ot#MvP>nIP`K->)aKsR9SBAjg-0dW!+jcoh`^0BVt&%&PwMVyovgd|di9bVp z8S%G;c<^tZ&hve+BIiJl9460bbm~~Lwa@u5p7JYjISG=f2lY*z_C>TSLnFzLh6B=< zHG|NQGYDO2uOZy-oG@8rkCB}v6UV#38K`cw{T9-$^%z!Vl#>%a63NBd8Q`kuE<`J? zW8G`pNb++*a?*~^49^VtFyQRa!q|?PH0(1&Y*1z-K>UZCcb*L5vm!Q|4v2Ho5OryWfNmu*w zmYDOANqcNFgv=K{I+FafBfDBdXV+7W;;9$&$=_b$hCYrRIyzO~sd2t%8X7k~YqmIg zi}_I%p*;=l_WMVY@+}Fwt>v38Rn9k9US4DnGw-`EMJ={82U{%No3ZZ6Y}$E`o|^+^ zhQ8-pp}S&-Xnl^%q@c3$8%b{`={0|nvLNi+FR-sJO{=&0sFKrK84Yf|x<}wNJP*S2 z&xI$yQrrb#CxFeloCo?Jc`yHT_zuqK)!>I8)fN0OWfrGiAN~80 zqS)cf>SKheFN+=E8z)CDyCt^&vO0V;ul$u@=x4#ao@WXOyn~AJM)2gB0#iQs6HE#J zb|;q z*H1xGkz~~r@td9W)j5aLwB6+ojwC;U`fOcuj|zh*Rln-=HBxSUbFP(go>SLMDf9#^ z9tbNDzW57@Ux3dRI)I8i-U~^86B>$VR$nA~? zzOwzm)ryj)Q+e+ND}<6$}4TeN#fRT~6GA?~Nq4!;`oZ;qXnDJJU5q+eCc) z$0NySP|t|p9p)z!B;ngf+^nCnZy^1p`cA^j)prskZYOc`e?F3Yza6(H5`LE(w~x5P zzZ^+^z>eD&3BOy#sqrRp6~7sAzhy&TLr)~V1LIKK8R8p>e+FUs32YQt1F+kq?D#Ff z70+Z}<9|nzUlzGjWyHJjMe1sEcf`wSCZo(`Nki$Q0s7LB)E=w;#!Nf#iWHo)LH1ps zTY)zN*K>Q3YZtI~U{dVz>%;8@)&lG*k(J&zV?Lj8%@b|;BJVX%EK+8`cq5%NJ!uml zk`UXP&3vtR)H&16F&Pd3tNUZifbRzWHgM?g=dgYdi4&|7{IL<^&NI4+5Yq&wBNLw8 z;BDTax(Y63-mXOFtWiUMcM|VcmivhxbmGswTU4N@vBScZoC0JttQ^4i&AnA8+>a z)~5j-Mr}SF8M|oj_5ssI`SNvuWMv+1n2m*5C8Nn_NWrSSF@DwG1Y8(P8^4x=asvDd ze>&=(E0Xba^(Tg(eIo_yR+?!+NKv+bUrE^`Pa=~gHbWQN6xOy}hmP(Q8M`<2dFfFZ>Q;o8i z*rdYOslDQM)p~4{YRD?)JaB;9|3K`+v}P;|R&K0^7W_3vtcUgq#&Ye8n{KC)`8K0N z@*WFiH^%L(mSAqOk8kgl+wU9M;SDk=cHmu#rwzAuQhdYMedOh%$)Cx9z`t(mt&0sx z8H4I9!u5e0NiyaYr6m-eeH-Xz6<(|095I&Yx2pd>6>*pPx96*6Y^b)+8%;ifINCnq zp`%VsLhpc^z$tmfX!5%bPR4kJTFCoV^xTbXHD}Ba)SPz@Jodxmtiwaup*nX z5jmST?7lj6TAGQ+plx~OsQs-3p5wT)z_tQY{SoEptP!lxlW}P~il0q=2j?(h$(wh7 z_3n&iZ+kDR8anGQN0V|Nv!SEZJb4MzNsx7{s! zAx*G9Kw3x3Mw9dRim=0jhPgA+Vjs+H+PeH713CLzb4 z!ZhQgDc?;fedB2IH-s7U@XjjTV@v3yI)%yfO}?c%3{GUhXtLq?;7}GBZ3%Zc&gh68 zp214NjPS>cV*6Dn^fyi*{NFQ(6r`JChg4LP<9BJI4__WTpkf9bpQV=>EYZxk#lhU* z_$<*VJQg^VAO4iz!Am|z(-MjuR2Ur&#b9iodS+2Z`ON|Fb_dR4O&Wf806Yjk2;SoG zS?Yc27W#8r~}Z*UEPjj;$EA@2N%|($-c0Yide|H32&fY&Y@pn~5Gf zfpxDOO4IfQ+_%#Km^(0vlG*agrCI@p5m^>y%lk}$baTq2eU78m^DiF6Ab8&tQ}3hTKWw? zn_dz-KQnZF>?|UmpV=JX-yA!w;yWGRi$~s%D}?p2Gs?et0>6fY!rv*5ol}^+F|T~h zQu1ym=0cud6g!oMdn;n{UOsuZF@5qr2RrDa9!C<44d~B|yqkBOpP#`d<5>#!{0x%w z_1j~o6`Z{L#&c@xxQZa}$|vs=`s8>9WiTWBsfe)JH{6F2_|*6 z&&*=K0^A%sI-#!#g8ZAg30D|z;1*o*^>btFxO!gd_43C@q( ze7w(EZXJJ}!(aQtw+?yMI(%DwichsiCs^<}__ooc%$emUZPXcHM}W};sb8G`QDDb` z-9ed)9m@E!EW`*;jU#KKf-{GOjM8nR$-504PDKtCIip<}&s2c3d;6&UeN@hSsBtQ{ zhb&-hst=`P9XfZ0-Fs?$%PEwF)7iOtTWF7=T4Df6`%W)C6Ti53*~FN z!uJUAiMvPL^};x?$AI+#t063FJN9>5^oognfAc6f_kr_ovewBBrB2%FoXO%?UEy*mx|;BTVwd8Me1f?@5qBU1sh|LhaUc#y%eX(O3!o!G}Yjqde5l+ zO=oPwXWYZ8bd%o>iyTu{^Dr4d&E7Sdd}aE)BvmGAW&2ryJQ#*r$KetAz^MB^t*ii+ z13v?N4scz6%sk1;QFtw5qqL!^Q>T!n{ez>)W~Y7I#y->e%fd_ahIw3M2WR+0qsgU& zwZ7w&tE!rSM6Pylj)SvGaKvy{*z3?+fzR5LDr?b4OZYlh9}7Sq2B-0FN0W~QwXvLq zzC8S|kxXl`(>@LT`Hzg+XW(TL%d)G;B;NYBu*YIhlec%RQzCf*{6S?H)ZF|dsN!z>U??>JDWSxB$Hbg_r z@!gdwITYqTlt9yjI}hCweEA8VPTaixta%84va#>60({S6>=U{RcQNItk*0XQQ(cYF! zWGfDPX?qVmIGVhdu&oD_9AXPu6?#py5%3{!=Kb?%^1}{JM*A!uIa}zPMVg(=JXXM` zn94W^&yNM=adB*aNjTzH$g1BMf=44f9y>gml)B?vPKY5h)u?Ra;Uu7;Nxj7M%A zF(1|VP5SKP@SFX$(c}k(AKx-?+71aq_X;22(?%pB~bNr z0d#fHt#s(Nv4p}^YVJ5kVJBz5cf0eF^wZ#4O0(eceb^Snj$ z=fBKUW*l@m&r*77G0+xu8!?l$NOb=}I`~G3)!I`kV&egs1W3-X>|U<`LIP zoL_s@W41_3CU38{!*476cEIlu+AZI5l6B4S2LH}Jgl;lS7CoQv0oTc8d_Kq|TY-yU z=qG-h+RHL+lWSC4J;VQuPX*ow52-B2;ql9$^=ej?i^AXb*SWfeGSgdzAkW@kLiQc~<(yUo)nVO6^y7IFZRxm48`>pT~Kwtg+;G)7ysB z+J%feAMu@{tMwxJe%SHnjwNqOZ#zwT^!FxjCMwCqA}#?-%b5UWjJ6t{C!aT#`~zX5 z%uSvgp*ia*7onDW#WGkbIS;^d`=5*@Ul1%Oiz&WiG+(ANcZp!LjkCwxwMK!>2G#&f zs;2w|HV;@GFsiNk$(*wSST!)oFXxO{Yqsy8E#q-Daf8I^{?VLQa}R0}^VYO&*-~hB zL9-W{Hwr(qFOK)7x?-Yc;SPg)2;5f)uB5%rInN6G1aL8R`HAdjfgLwsLVpq1F<@-_ zT2@VLro3?^@L8Nk5qc9Y{lq-rCxO35@Kb%5S_54a+ZFe@>s0Y;hpz1TV`=k1;kOld z9q{)B@#EF9v`&!zstMeK&<#U(558enseW*2Z1@==89jIpQ`1Q7_v>El_f?B2sI#SG z$@26zBDE&7m>u}=R{u64^f}-3q;9su_rz<^Q@YKjNx;ms3nGt{U5j{aT#!Xaavg!pbPS)jUDs z<`8#?xJEb5wr$bDeB#a#cQGhWy!YjM9~C`(y@`BunKbAh)Eq(b8^}LvsY04u{4WFUyRVDVu9fm0UFFK1f>K(2YWOlS7x$ zA9%+6lGZRZbFUfm&do@x*GQ_)OiGo_N$47&>y)%qM&uN|%C2>RxMAXIbljcx`e`v| zM@|B7w&C<;%UqgL;^w?*%)WD4`kLG9xqSujYT%y|8d(#+--fI2hxx$!z)!q+OyA$$ z!sf7AliLBjxMD2%_nOb&*>E|}vKP3rTjBp{8-57*g33(z3E+?Uz|R8jUO1Ng7tQ}c zn~(K8%A{({zN=3@689UsEM^102wbl(Z3~6|h7~_GUM?qYsCq1UZ!yfUnT)k3j?aX` zYQX1h(P<&GA4CG;1d zA6`C|JP@3AU%`5I} z-wz|6=1Tok{|8MYu-6KN^c2k!XWAxb*_@3op+5m`JGiJ@{UpCEk8W!)Hh zhfmvwwuI+g8k@fB$L#xAcov@Xf$aqL2;o4U_xkXplcD-CE~Gx)FqV9c(9=8jVq22e zUBIh>cL|)lx^0WRF_2oeQ8F9`cL%tUU^{3GebYw})Fv#pCJ z;^%PoWRUpQ^m0p$TVzi09RJ}EOXL~)m&?1P-A}-G*Q&AP>t@<{^r=6?MSi^wUk&tO zTN@2O*Kb6j)?OM(;tc7vw2dV{A2dHx`???WTa>Sn7rVW6Q1mqa1&pUV#*!^g*}Hmb zG;hGFjLrwQ9b9Yug!7=j(62Jn5jz`(_9(PX!8&HXQ|G%GDmpw3{h7|Oa?DKE*>8RR+rZuFhL&S<@A$5<WE}WUnIZ`7D75qL8%zEyn6@$W-Ar1^d-xEmCH4aQpU+CBGpEsdma7-^D|RGqo@m^k&?GPmd-0 zg|=GS1KF|Vu*xmsEsS0#4@3>&c7yj(eBU%e4G^Sl{4L??Vh^ZV-K%#T7H8r0H^OTJ zv+ZX44BHtV`#v*f@B1p<*ThOg@3yr@oRp26Z#f6f+X+)NoH?`^S?1;n-8gzAa<+@BzPWpeic#gU}uR>{#-M&@XoP`_#IEYSO+LD`EY_ z-Qr$GGq){rclezl<~ooZf^Na*9C=f^QEhfrY}U5Rc%4wL&hn1h7PHTv0fgUfoSbhN zgy(s}hAvY50C{3PETa=p_y5lFzW81lm7Aoz>0hhvov!xi&)&<;gxcd7xv%8}a*YMc zRS`5lD~IL`^t%p>C4c0!Cr*7to7*CbWvlU#aC+r~Mr>2=YpFXpmi)exu0vNXbhHwN zc4`>v8IMb%w;E4sOw|dmQ}7bq8D)zM&fPDIVr4Wb8RaDdBC(f!(4T|;UFr6g(v7SU z|Dz8BTCpbR&qBZ8i(|=mq|>L;mv-X6eChqfQf;H;r6NN6^iN~%x0W)-XAJBNQP{V5IeK997A@6c<^fe23t*{nS|U zTj}zo%7?w0B45L-R`bjw(9inOSn?mJ<3{JxW@y93-k>1|Z1Y~}ol%C@&xsj>Ti=+C}rJo&Js)yVwt3-(&= z8Q{ZzI&QC}A;Y%N?TkL`@s)K2?FVsh5gO5jeehP5Q}g;c(oqF+qCv zs&L)#7%m<6jx$p{;_Vky{fa{t57BM6#Y}h{M!w0c_lyxQj;pg9gr4|y~4l(K;a#s`o1lom&Vwr84# z(o2N4SwmYsQm5ck*{PYy8FA!s83zW~ljaOTh_ z7|4B6V#Kiv07Zs{uvlE_2mW;dK zZ!^bRqQM=Ex1e+9ic2`bn+AYK94GhK&2Jb_CJ5VhDbzHqYWZTZ>O)7t*$vK{1&88% zi(}Izj3*8QU+>aN`EkIKge9v|N8}#6nM+f3MEb=#U=d)ypncM5#>2-j3Y92tIWkLC zLB7|s%?VQJgx_{(4_!N+_AcfgU&3U#a^V}J_+sT1wqwI zGPsU3Il{^j1FopDb0a+JaNUjL?l*v%$Yl_3feY`|;J+H5u~Nxur`*bU+zz}};7*!x z?%PoEI{B12%mHwOhx~%lkunjSz2KrI^_vWL2e>qq6XLEWR`^POWh^0bX3PsP6^hEI zCfnar+@RjjmDPdFx;`70TXBcs|4x@b_f8QGl3(NzH~YGA``j^ON_%LgJ_(}MlNS(Q zNBm#oi_C6Y6>m4jmQ`|2+#PAwvK{O`K&I>re;0fvD<_dvWJ-X$1fTj*!Pf`XJ5%L6 z?g!41IrS4Yp`D`hA@ftBG78L*(T6@5rPE?#yqc^$rM zmjo+tQg4Ugv&d&M-5JwEm>S4i=0 z_)Y3^txomN%9_`_;U#T!H*OyMw&NSN$XJihTDhluFu-&H}hUZauc1XH(15Uc36;8q;?`d2~^SFHumay3W1>8Jfs%|cpIbo=g zLQ(mX_sjc;lRiU!^Kf&4?F6RgiQG$|(~+fUHH_!eC_1mA3)zo91^!-P0DrR%af3X) zHNE`I%CE_bgWXQwUCUFDE{0$uw%>W6JR&b8T2%J<+Da1VjI zeiFWt4=Im};9e!T3^Vk1wB*s-_6x4KbKu`42vzJeRI2imS7rj`m;4D``6}kP(jH2G z^a1FWMCGV8Ri5L9G#WwW8h7aDt{&I#M60j234OmxJ~(Zu&yx1+o5z#QlD6NNfpdTn zrVU3UTzw*eBPu{^mSJA*dkTH9ntRK5@+iJ9Ps!uQeK@e*8kElkuo7ACgYShPS>-&z zSK%uIaIR1*rfSZ#Uo{Bi8+Z6tw|M3tp1B@q89Fa_Xgi_ZBnamCrA(a@)e8h%IhX1u zg7PT&6SoI`uXp&V`4Hd7fl*+)qU+W$bb2fil!nIL4lYNg)o(J~L2zk0vcg@R1+Jtg z`K$nUDs`(2{4F8{Jzxj6EnB`5)vYoo9g%;AUANTvXR1@E7JBumN0xgyW+HW7Y$#nq11|?^3~-qyED6TsCHzS3I4|j ziwtI;M6q;xrjhmXm94aSBz0^7r0uvC_?(gfbE@9cYB_sZvQB$BQ@o7Iv_ySFU@v4= zw=-8FDCKhqHxF1wU5K**oHGAP>72|#lgM)c*9YyO7(_~*)Vy8ZCk%bmr_r$YjiJh@ zpTbvkw&$IU5rW%{#-LY;g7hY13E?}uV?4RSm=iaKzT_AH12vhGN~L9mIEYW&;dAI+ zhBWz*w6aN$*D+@bGO*- zJ>&LS{FL5AP8M^F+S!?U5FHkIZ<{g9VH#paHY z-s<7;spoGM?p2G)yC;m#tFo@E0TR+`k`B zelS>W|M4NFbDNLgGOv-cXop|-{!3q{55sr&=cd-i#gRwGsfVEpYTHHkv#C#e4otnh zkUMC~KA(MiA!|4#2Xk*PjzDkyPRFUuT)4=i8c34RsnjaZY-X|{)`SIoKM^SjbU&p^#J{_IW zYAy_bhA;QqW0Ip_lgsy$@ub{Q;VYkv%lnyJWQ@x>YxHHm@jCEp{P5`lS-i|(Gr=6Z z5s{?)j-5j9Clhyc==WQ%JVN!B68r~wc9Y0Ir z_<7e|#C}Ak-O#K3PQpRBLk{jqa6d`i3@qPU{M64K)^8Iy>#k{w3w$q#y`T(mC0Dv- z0E1=IWqaC>j0)k<)cF+y0(_djKI*#3IBy}v4D+xcr}Jz<4C zXN}vRwzko#?AgP7@b1HH1@~L{QZ`QgRbzh!BU{z-xty|28@yFU%RoPgEBVcMa;-zF z*1ToiTIN8g&8hY1bNm z>#R%owL`N0`aRO{&NEm~h$B`V^zp|z|3X+~bZjL=TdZbWVo%-RG=TGHa6THt-F~)C z+psh<=_Yu}IN;<+YE0wk%sekps=lu3m785+DHbnSkKJZdABRTAlcP?4eCC4{p*_9~ zLVnBTa)77=UVZQ_9dpk3@Ep`Oh~3P=%>!4TS@p?VneS_K&fIS`^v9w92Yf>(qRDp{ z)wG%!yF0;>Hg7ksX`H<}hb|-Un`sBr+MI<^DM!=1WPEZ8w;Db-IDE|hH^gCm_izF6 zQfH<9?F3)?MMGY7THiU=bQ>uM)QL!}gtg=07G zmC^KNA@+vdZCzGSS``6&Mb@pj^S>K+&*P-GO_E4jqhz0_f@aRe@#Hhp?ccQ3me8ks z>aki_%&6V!yh;RKC*dh|!6-91GP^jHv*5Cdi%hr+@OUl0@NoM(=Nv|mjmAM2+EHll z!)I>Q=&XaX$H@a1bxK)P;1a(dPgdd!f71?V$2WV5N|kK_)LqcLFukl&b4h1qAfr^+ zXW#^m4|ur`v`#hwy&Y&^os{}3`JMfT@nku^{DR6xWM zedrGv^s*i&b@m{z8eypPN9SXI7e;?iSao}GqWf@?{u}YpmweMrA%C9A4>I6ZYkJbm^0e|uEaCi2e}}Rk6*=g z8MVM`vNJPHq$x7CgRAd=%VS?*sVv;`ZSl#661p1@0p586S>Wb8uz2YTQk@KHL!Q9^7Ye z|AIS#`!Vh}xZ?Yu!Mz+eA6JXJ9@me%8~0J%1GuBOAK=Du#UF`TFTqvg8gMPRZrmo^ zcH9SW58#gCzKc7DyNG-CN9{b6;=dMGi(8Ici|fa2$L+!0k2`>S5O);!2=3ds)3{&Y zF5v!vd&bA$iF*NVF7B1M`M6r#GF&rm9j*_z6}JQT0o=W~`*EMa9mE~RJ&bz<_ifw{ zaA$GnapSniFnPw!!p*_W#m&Rb$5rE&;hJ&nxPIJL+}*fcxO;JXaS!0Wi2E1Z!?;Iq zCviWxcB1r;O@um$9)lZ1osWx z3EWBCk8!`kjpHKs$E+A`Htxl^dAQf&DsYQ&O*r}8g5T$a-;Tc_vO}Mw?cHL%_@xMtj~xJ|h2xO;G)!hI2U6n7GL26q8x?TcB@ z!AmDteQXIWP}&(&2oFkiIes_Pf7=x9rH_4Y6{ zbYRN?EMMPa)mzma-5rUJ>M9wR+u>{1-byUjd-FWd*59?Z!%XqhB3X6ErmnV*s@A>% z>ock6MXeh)v@UPmfE-mtD>Rk?T_I4DnYE#4#pc$&g&Wtc>*ycg6vx7j4yc=~s%{Fl zuC=GVyMr?Uc0L;Wd)qn&1}KUDawM(l?@DyFwRY?5{o1PONp$pk!PeR$ySSD@-nza6 z4(p0)`#U-sy4Lo$_HVJiP(+@pdV24x)-_etB zWU;=M39E0nzG*<4I#EzNKBx?Hmdzq9xPo7C`W4Eh$B>R&T)XqOv^8zmn zyhQ>NF)G{J`^gu163B`~Yky*6UwzNI-b$;}hO|2cX}wiFZy88*Y-sAj9tXtYBxL=q z#58ra-B#7Ru?O9MDYU4&cWrBTWp{UP8>?>ilav|zP|j0BZ`*CMBX7s8>;aSKUxw;? z&`N7}*Bu>RMO+cCAE;hfwW5I%S-2(9Q8OsJ?mTVEK(+oN+|b+F?r4ZIxFNiBV|SuU z$eMa@=xXn%>TK<|_Jpt7*wMeGv7>*TREQpoQZmrdZ~bjX4AS4ev7@JLi!~#H9j58~ zW`WqMsu}EP+bFe#qD*vH8zg3BPp7iQ_L{-Ajy{Q`k)|2~pVBw{~yruy)B43D{5fMFJDD9*A7u(GMnKw^P2oJxf~$ zZnM51(5`h`_#Xf!YR5JXN3QR}3R=67C86r_S2RQw7kem?8(O;()QS~dJ?pzWoGO1h zq6@aE*DY;o<(f6^*g;RnU{}I=BTwr)Xl=-B|M~$|lh>^2LgO7ho2(kb-EF-+n-qjg zA$i`gc1_#H{xus~(RCNk109Jqt$lrK5?lJPrEVLtae&fmO>}njQ!n0Pt!ZuB(B9o+ zy`RvAf%R)t!q)xPnl?N1DMFp?UEu!ES_4f_uVwv)kjOWyXwA9}stzwG5<%NK8Tr|v z&F$8zqBWgc`g*bOmLer2O5DI~eN9*ITFZK*XpJ)BL}-nZ+q*(*`r4!|vbGWGr7^dx zuZ7kO^la|y@9Igcv#g)7}w zp?4EyaCv0SX2rsq6KP%B+n=!hG}7AEOO1Y6q&3mYw$dviG;&fAt@#nV1l|}~XN$#~ zg6leZk)txQ4(0<^ZNyHkF0#%MVKJeNi8iZ2`J3Ug)DDrtvdB7Vo~&!dN0#N{5B6Cr zBkKk_I&QOWh^$L=baz|Lk#%m4Z#2TI2-65d*%Hxt8;W!d47PWzM;X>TB8c7E-62L{ zS?`K$aPsl~$cBy$ZPHWhR-rx)R{o8IRFQl@LKuo=-5b&6_|XWNK;n-_ZXb{``b4C^ zwF|xM#qXhY{bYoUs6zS_A-iPv5!y`a%|3kucD5+gq=ByWJ+0lA_4&wv!~P#41B%VT z$iP5bYY*l5#mGRSzYWD&hg7H&Yx|N4iPZnBLL&8-RcN5E$NCouVU5zZACYjkSj)dk zs7Dw*WQQO>YKI_ySVDbk`){+pCZYZ|k~tk4rY|=)+m$5eK%vwK-Y;yAb>&WIdGE6T2SA`^( z7gR`c`M3&6F2^OL^7DHM^@!^JV26kfT?S0aUM!(RFVZcvs(MpBfwc6!KvwohTVeMO zmUWd?-QT*tvQ64l>52we#}Y^_NCVW{xO!4emPFIC{aFgq*h>YptUIk0bqo7@HxG2s zn$`Apw|B@`?5<2G)ZYQRh+dPHrnbL#Lw$8a*FXa7@A<*Ok64xMw{9Fr*dqWLGf6(4 zWi6!cueX6sy-mH8)Jqwgwf3yu%jbJDmV!pk@#*4UA^G7&A2Wu4to@q1UAX z>8sklt+OAc z2O{0i%J?nO-)l2Epr33U>r0l%+DiMF8WsJ-s@c$&*kVZXI3uc!8=PF(qdo>;BPMid zFBIWmT-WZ1f?!-2d&K?b(;v@Pk_ zVt3Bg)oP>#*+4@tDzRQ>KTC0ox>)~(i<_V7)Pj{Xh@p)!$Rh`cd@@miZC)+tUktg^N!h+RT<=X|d~&`=-w z|A>T_w{EWQp>0#beKZZCM%ngI&Kk~)5$m-c5cmq!5G?ILls4q}y1;Dt?P9UMm4c{p z`F85LsbesKEHgs&17c%c^bd0g+vL}G4Roz#4E`b@H}&>z=)gKlLozb6t@j3No_ea^ zV2`U8g_gGVIfD-h4Zcf5PJt}!9jvsPjHer{8$*uqNNse=`zBzn%B@wQr334op^6%j z^y$IMfYlL_$(5^IYarA}mzA>S%^}pQ)qy12LXC;~9+iFTeWB$Y?ftErokXn<^1Pnn zWbz=!r0VS+7iJs&vff13I;I;k_`1Qm-;H$@sMIxJJwQx%M=KM<*1p8Xep=+uX$V&K z4}_(6vQ6NhLUxfsLPXxeE2f)vJ;PN<#>}3J+v+3jc6_Hh0UG&dy3HVo7i&zt=wQjK1u>VqJUCRo9 z{Nj&tjzAsYQIA&h_ZaudrNYi{=qJy#N*C%Uw#Bb5!KI!Xm+&k~bAF?%N~|3QzoCv2 zt5cNZ{LXgqtRL_jZ!NKv>cIZGaoM6PpYZ~D6X44Fy6WYkL~-&RTWfXyzIF06uzb-% z>w!n+{G5l#`pTu1tg5{)da+fE;EKMw8<}Us9uimdwcdU09Nzk7eRXBi;4Qy=tnyv$ zi)K|_*Ly1Zn`htAdQHzK#;&eRJnQ){{?+N@)&KSGYZoUk{_cmLd-Df=aK@^8=76>L zov*hZeQ1vL^VZnVg|ZnHckBtruQ^_{>qS4yj6U#{7Y+UJD|am!fA%lhA1c~)_jND5 zDmGNU^9|qWv-Y+=_Vv5N@hd;E?6q^OuGt&E@FT14p?x2`az@1qYCqCF-+HvHKvF2N zg26l;>&s_O^q#IwyruEArT;wigGc+UrjP&d$a~H{KHS~7sp!j}{E@Y9;aA>v)qni5 z@;k%lLU$~AsHpKBcZOeg|M#|iq4GPIUAX7&@bEK!e|b;!Kh5aa_J!!#SJ0$9cl^pz zJ9?h^jmta!n=bXKVTo{~I zzxQ9pu1G8)t44CKT=c_>kq56Xy~>p7L!aoqGxYsu@4nIyeCV71@wzv^t>+3d)+_l{ zxjXXHvmc((aqaM`w}0VdCw@3uf8ot;!H8Uy-w`3sz4XHC?tJ#|zvY%Gf^2DgTvGkr z6~BMa$EuUBA$hwrNcly(uaRW#TzJ<{Uiu%&VqK6=G^w}P8FJKOaI*_f>pLae(~#h& zVs?*z`0T@%|Nh_a4!asu#@2iPRaaej-BmHSJVy^?^;<4=Oxkj&F_s_W#}W&|PXK*0tIHc+sE zf(;aG;OT7xzy0lRlLa?@%ixLD--7O^ukJ;61^rKN{XNn8SI~b!|4+mQo~Zp5=>Ko+ z?}_MMXbbxLzt!IpE&qc4r?>tJ`hR-sub}_j^>4O)xt62J<5Gl8IW9FnleZ2((KIxl z>FAqz&sBbt$E66Ha$IVDCT|^nqG@P8)6qBco~!&Ok4q6Y<+#-ROx`;DMAOiGrlW7> zJy-dkOdgkl_hk7p)5s+}8UK8aH}jjToKGf?OTl}xe3@zF5}u5IKF6E+%~j4PlgFjt zJz2iYG;#?~#y_9q&HUyn=ab3fQt+NEUuGJ)geT*l&+%q{bCvVStbG(_~T;HQ|>sY^IS*_)^O9 zRP!?Pn`_$H@Gx;E3!8G7xF-BkhRrl`313QCo@!oZesfJb8y+UkWMNYd6W4@a%CMP6 zF5ycl%TvuOm;4HiDW}Q9gkOsAlgV4lXQq)$So4{VelGbH8Z)mZ4-meounm$2sZboI?L zyVPayWb)RsnrY+`)_k6>zFB6Mx(uF7-da{Oja45-#XA ze|4LUZgSDNNs~<)1)Th~5mT4BgbTXOU)^S-n_P5m(qxlH0VjWL#MEUj;eu}SSGU>d zCKsKXG})w4z{y`5F?E?sxS-qo)onJq$wlWTO*Uy1aPrqiOkL&@F6cIYb(@WDa?!a- zlT8{0ocy&BQIWRpe#Cx30k)MYN=f^PFyx7p|>7oD3l*`!gx z$zK~Wb(u@JpxgY_Z8o~eMdv0>Hfa=a^4CU8UFH%l=r(_Kn~iRA(YZ;JO&SH9{IwBN zm$`%sy3JqRW}};2bZ*jQlSTn2e{ICnWiH`@Zu3{S+2|%0otre-q*1`hUmG!XnM=5! z+x*pSHoD10=O#@yX%uks*G5cT<`ORGHh*=Sjc#($xk-~v8U>vEwGmU7xr7V4&0pPS zqnliGZqj6vMgb>(ZN$`NF5!Z1^H;ao=q4APn>5*^QNYPx8!>g6OSquh{MBtXy2(Z7 zCQUYJ6mas_MoeAi5-#XAe|4LUZgSDNNs~<)1)Th~5mT4BgbTXOU)^S-n_P5m(qxlH z0VjWL#MEUj;eu}SSGU>dCKsKXG})w4z{y`5F?E?sxS-qo)onJq$wlWTO*Uy1aPrqi zOkL&@F6cIYb(@WDa?!a-lT8{0ocy&BQIWRpe#Cx30k)MYN= zf^PFyx7p|>7oD3l*`!gx$zK~Wb(u@JpxgY_Z8o~eMdv0>Hfa=a^4CU8UFH%l=r(_K zn~iRA(YZ;JO&SH9{IwBNm$`%sy3JqRW}};2bZ*jQlSTn2e{ICnWiH`@Zu3{S+2|%0 zotre-q*1`hUmG!XnM=5!+x*pSHoD10=O#@yX%uks*G5cT<`ORGHh*=Sjc#($xk-~v z8U>vEwGmU7xr7V4&0pPSqnliGZqj6vMgb>(ZN$`NF5!Z1^H;ao=q4APn>5*^QNYPx z8!>g6OSquh{MBtXy2(Z7CQUYJ6mas_MoeAi5-#XAe|4LUZgSDNNs~<)1)Th~5mT4B zgbTXOU)^S-n_P5m(qxlH0VjWL#MEUj;eu}SSGU>dCKsKXG})w4z{y`5F?E?sxS-qo z)onJq$wlWTO*Uy1aPrqiOkL&@F6cIYb(@WDa?!a-lT8{0ocy&BQIWRpe#Cx30k)MYN=f^PFyx7p|>7oD3l*`!gx$zK~Wb(u@JpxgY_Z8o~eMdt;Y zwy z2^31;X;%WJE`3&-> z!fQI>2IX7Br(>R`BD2nCkUte((-Ai)-x@w0^E4Hibv}dqsqmVPxIy{W@adSRsmQGJ z8RSoe*L1`U%D0A3$2?6%W}VLHGDeeX(}@7d4+PYZw;T0d76sMI-f!QRCrBC+@O4G_;k$ERAkoq4DzSKYdYcvb3K7;(J@S2XeLHXA3>6oXf$gJ}j0kqCmjM(Wo^~Z5_e7N8T5#??5p_Ixeou$GP{`v`)8Zk;co$*Sxa96&#H(eh`g`V}>=p3G)kUyli|;pAD|yXngU5XiOY4 ztnp2lUpN~)FOK)wkFOV|X}rD{Pd{rs{T$?HgXhKZJ_qqO;hM(ln>c1zzw|>qC*|L#A z%j@;Cq0I*zuiW}MA7sl$1}(4G&xST1aJ+Ks=X{VY8yU2`UOyY!e8BO_t)KHjwrph3 z@_PMjX!8NbE4O~m2idZbLCfp)v!Trg9IxE^IUi)pMg}df*UyGFA8@>K>*susEgKoM zyk0*W+I+zA%B`RCLAGpU(DHiyY-sZV$1Asf&Ij4DkwMGr^|PVP2OO{5`Z*tD%SHw* zuh-9pHXm@ja_i@OkS!Y-w7doXsX5p1$6U^y<3NSSr?>>jEn z;eLJ)FF&}3Y2S~Zz$D&uL3kS1FWyYU%gc-lqV>}F;py~ET+LhiesmMX`SJAQF&S*4 zG$x9>l<7-4UZ?p_B)=ccMEI9Fu8@AZ-Y#|dPR6fL{)O^4ZD2BcxzzDy+7iCh{3qjA zNWWnJrVUJHFPA#rOuJzJ|M&IZtBxuB!d^8X3YZ;#if0Ks}o9XGa zw6Afr?}w}7E`?v<|J#iEVU}y5d%qWPHl64*q~noj!~-_Q5sujzCeesmgVB6=NX(rZ{Q^nUV~{B*pR zx5k;sH)#v>DZ87f%*;4%`Tbu#dzynB9*e9Qib`6U*Ips5&CrnD=9JDXvO-oxh4Zw~ zvcgsw6GOq=ceQ0jta#jcqN%#fn$5&f;&#C0a;pTGJatAaQWy%Algjnh3TqAjHP&)M z_13l4GM?-CuO%$MFGv384?<@V^EU z!YQ-Lnc2P`SB?xKQMdJCXf=K{Gy_(f;?oDeE@*pH;{DblYa`DMR;#rI=tg4W)+=!R z3bJ0s#^GnicUbMvB*5>7ODQFmO6z*k>L;~S8n3cmspj3UwW8pO>CsMXrQ zvjvr%nwgdenIMHCB3IQfvda z2ik7jdf-wfaVRU`B)J>lzsLG3_*j-LYvcbvpiDl{ucbh}B}gs>xfL_qKyK9mhXtxW z^bmoChYL_WBQVt@0!@R(6e4CB7*v2}F))OHU6%)R9VlFoxARz<*vCo2~ diff --git a/tools/rGuiLayout/screenshots/rguilayout_shot000.png b/tools/rGuiLayout/screenshots/rguilayout_shot000.png deleted file mode 100644 index 1bf18a834f615f6f51d37756e3a9a442ffa60ad3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37824 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 Kn{VoL{J#KV;uJ;z diff --git a/tools/rGuiLayout/screenshots/rguilayout_shot001.png b/tools/rGuiLayout/screenshots/rguilayout_shot001.png deleted file mode 100644 index 2d84e58d564f83e5c694ff20a027841e98d7754c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49709 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 L-EhUs`Plyepoc-x diff --git a/tools/rGuiLayout/screenshots/rguilayout_shot002.png b/tools/rGuiLayout/screenshots/rguilayout_shot002.png deleted file mode 100644 index 6f0ca459dae36a52923fec514678a48cc6b3b36f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32090 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 diff --git a/tools/rGuiLayout/screenshots/rguilayout_shot004.png b/tools/rGuiLayout/screenshots/rguilayout_shot004.png deleted file mode 100644 index 4c92ba6860a44c8a7d2c8da4d60f81a4d92b185b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40968 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%0DH&%0zsiDr_EIh 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

s@n?~gc`Pco53$@iYBRt}7ltP^HeJF_F!V4d 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 diff --git a/tools/rGuiLayout/screenshots/rguilayout_shot005.png b/tools/rGuiLayout/screenshots/rguilayout_shot005.png deleted file mode 100644 index 3b87c388877cbbef573733d8ced1da426ff69061..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32654 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 JWt~$(698~r7cc+- diff --git a/tools/rGuiLayout/src/external/easings.h b/tools/rGuiLayout/src/external/easings.h deleted file mode 100644 index 9ad2731..0000000 --- a/tools/rGuiLayout/src/external/easings.h +++ /dev/null @@ -1,253 +0,0 @@ -/******************************************************************************************* -* -* raylib easings (header only file) -* -* Useful easing functions for values animation -* -* This header uses: -* #define EASINGS_STATIC_INLINE // Inlines all functions code, so it runs faster. -* // This requires lots of memory on system. -* How to use: -* The four inputs t,b,c,d are defined as follows: -* t = current time (in any unit measure, but same unit as duration) -* b = starting value to interpolate -* c = the total change in value of b that needs to occur -* d = total time it should take to complete (duration) -* -* Example: -* -* int currentTime = 0; -* int duration = 100; -* float startPositionX = 0.0f; -* float finalPositionX = 30.0f; -* float currentPositionX = startPositionX; -* -* while (currentPositionX < finalPositionX) -* { -* currentPositionX = EaseSineIn(currentTime, startPositionX, finalPositionX - startPositionX, duration); -* currentTime++; -* } -* -* A port of Robert Penner's easing equations to C (http://robertpenner.com/easing/) -* -* Robert Penner License -* --------------------------------------------------------------------------------- -* Open source under the BSD License. -* -* Copyright (c) 2001 Robert Penner. All rights reserved. -* -* Redistribution and use in source and binary forms, with or without modification, -* are permitted provided that the following conditions are met: -* -* - Redistributions of source code must retain the above copyright notice, -* this list of conditions and the following disclaimer. -* - Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* - Neither the name of the author nor the names of contributors may be used -* to endorse or promote products derived from this software without specific -* prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -* IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, -* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE -* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -* OF THE POSSIBILITY OF SUCH DAMAGE. -* --------------------------------------------------------------------------------- -* -* Copyright (c) 2015 Ramon Santamaria -* -* This software is provided "as-is", without any express or implied warranty. In no event -* will the authors be held liable for any damages arising from the use of this software. -* -* Permission is granted to anyone to use this software for any purpose, including commercial -* applications, and to alter it and redistribute it freely, subject to the following restrictions: -* -* 1. The origin of this software must not be misrepresented; you must not claim that you -* wrote the original software. If you use this software in a product, an acknowledgment -* in the product documentation would be appreciated but is not required. -* -* 2. Altered source versions must be plainly marked as such, and must not be misrepresented -* as being the original software. -* -* 3. This notice may not be removed or altered from any source distribution. -* -**********************************************************************************************/ - -#ifndef EASINGS_H -#define EASINGS_H - -#define EASINGS_STATIC_INLINE // NOTE: By default, compile functions as static inline - -#if defined(EASINGS_STATIC_INLINE) - #define EASEDEF static inline -#else - #define EASEDEF extern -#endif - -#include // Required for: sin(), cos(), sqrt(), pow() - -#ifdef __cplusplus -extern "C" { // Prevents name mangling of functions -#endif - -// Linear Easing functions -EASEDEF float EaseLinearNone(float t, float b, float c, float d) { return (c*t/d + b); } -EASEDEF float EaseLinearIn(float t, float b, float c, float d) { return (c*t/d + b); } -EASEDEF float EaseLinearOut(float t, float b, float c, float d) { return (c*t/d + b); } -EASEDEF float EaseLinearInOut(float t,float b, float c, float d) { return (c*t/d + b); } - -// Sine Easing functions -EASEDEF float EaseSineIn(float t, float b, float c, float d) { return (-c*cos(t/d*(PI/2)) + c + b); } -EASEDEF float EaseSineOut(float t, float b, float c, float d) { return (c*sin(t/d*(PI/2)) + b); } -EASEDEF float EaseSineInOut(float t, float b, float c, float d) { return (-c/2*(cos(PI*t/d) - 1) + b); } - -// Circular Easing functions -EASEDEF float EaseCircIn(float t, float b, float c, float d) { return (-c*(sqrt(1 - (t/=d)*t) - 1) + b); } -EASEDEF float EaseCircOut(float t, float b, float c, float d) { return (c*sqrt(1 - (t=t/d-1)*t) + b); } -EASEDEF float EaseCircInOut(float t, float b, float c, float d) -{ - if ((t/=d/2) < 1) return (-c/2*(sqrt(1 - t*t) - 1) + b); - return (c/2*(sqrt(1 - t*(t-=2)) + 1) + b); -} - -// Cubic Easing functions -EASEDEF float EaseCubicIn(float t, float b, float c, float d) { return (c*(t/=d)*t*t + b); } -EASEDEF float EaseCubicOut(float t, float b, float c, float d) { return (c*((t=t/d-1)*t*t + 1) + b); } -EASEDEF float EaseCubicInOut(float t, float b, float c, float d) -{ - if ((t/=d/2) < 1) return (c/2*t*t*t + b); - return (c/2*((t-=2)*t*t + 2) + b); -} - -// Quadratic Easing functions -EASEDEF float EaseQuadIn(float t, float b, float c, float d) { return (c*(t/=d)*t + b); } -EASEDEF float EaseQuadOut(float t, float b, float c, float d) { return (-c*(t/=d)*(t-2) + b); } -EASEDEF float EaseQuadInOut(float t, float b, float c, float d) -{ - if ((t/=d/2) < 1) return (((c/2)*(t*t)) + b); - return (-c/2*(((t-2)*(--t)) - 1) + b); -} - -// Exponential Easing functions -EASEDEF float EaseExpoIn(float t, float b, float c, float d) { return (t == 0) ? b : (c*pow(2, 10*(t/d - 1)) + b); } -EASEDEF float EaseExpoOut(float t, float b, float c, float d) { return (t == d) ? (b + c) : (c*(-pow(2, -10*t/d) + 1) + b); } -EASEDEF float EaseExpoInOut(float t, float b, float c, float d) -{ - if (t == 0) return b; - if (t == d) return (b + c); - if ((t/=d/2) < 1) return (c/2*pow(2, 10*(t - 1)) + b); - - return (c/2*(-pow(2, -10*--t) + 2) + b); -} - -// Back Easing functions -EASEDEF float EaseBackIn(float t, float b, float c, float d) -{ - float s = 1.70158f; - float postFix = t/=d; - return (c*(postFix)*t*((s + 1)*t - s) + b); -} - -EASEDEF float EaseBackOut(float t, float b, float c, float d) -{ - float s = 1.70158f; - return (c*((t=t/d-1)*t*((s + 1)*t + s) + 1) + b); -} - -EASEDEF float EaseBackInOut(float t, float b, float c, float d) -{ - float s = 1.70158f; - if ((t/=d/2) < 1) return (c/2*(t*t*(((s*=(1.525f)) + 1)*t - s)) + b); - - float postFix = t-=2; - return (c/2*((postFix)*t*(((s*=(1.525f)) + 1)*t + s) + 2) + b); -} - -// Bounce Easing functions -EASEDEF float EaseBounceOut(float t, float b, float c, float d) -{ - if ((t/=d) < (1/2.75f)) - { - return (c*(7.5625f*t*t) + b); - } - else if (t < (2/2.75f)) - { - float postFix = t-=(1.5f/2.75f); - return (c*(7.5625f*(postFix)*t + 0.75f) + b); - } - else if (t < (2.5/2.75)) - { - float postFix = t-=(2.25f/2.75f); - return (c*(7.5625f*(postFix)*t + 0.9375f) + b); - } - else - { - float postFix = t-=(2.625f/2.75f); - return (c*(7.5625f*(postFix)*t + 0.984375f) + b); - } -} - -EASEDEF float EaseBounceIn(float t, float b, float c, float d) { return (c - EaseBounceOut(d-t, 0, c, d) + b); } -EASEDEF float EaseBounceInOut(float t, float b, float c, float d) -{ - if (t < d/2) return (EaseBounceIn(t*2, 0, c, d)*0.5f + b); - else return (EaseBounceOut(t*2-d, 0, c, d)*0.5f + c*0.5f + b); -} - -// Elastic Easing functions -EASEDEF float EaseElasticIn(float t, float b, float c, float d) -{ - if (t == 0) return b; - if ((t/=d) == 1) return (b + c); - - float p = d*0.3f; - float a = c; - float s = p/4; - float postFix = a*pow(2, 10*(t-=1)); - - return (-(postFix*sin((t*d-s)*(2*PI)/p )) + b); -} - -EASEDEF float EaseElasticOut(float t, float b, float c, float d) -{ - if (t == 0) return b; - if ((t/=d) == 1) return (b + c); - - float p = d*0.3f; - float a = c; - float s = p/4; - - return (a*pow(2,-10*t)*sin((t*d-s)*(2*PI)/p) + c + b); -} - -EASEDEF float EaseElasticInOut(float t, float b, float c, float d) -{ - if (t == 0) return b; - if ((t/=d/2) == 2) return (b + c); - - float p = d*(0.3f*1.5f); - float a = c; - float s = p/4; - - if (t < 1) - { - float postFix = a*pow(2, 10*(t-=1)); - return -0.5f*(postFix*sin((t*d-s)*(2*PI)/p)) + b; - } - - float postFix = a*pow(2, -10*(t-=1)); - - return (postFix*sin((t*d-s)*(2*PI)/p)*0.5f + c + b); -} - -#ifdef __cplusplus -} -#endif - -#endif // EASINGS_H \ No newline at end of file diff --git a/tools/rGuiLayout/src/external/tinyfiledialogs.c b/tools/rGuiLayout/src/external/tinyfiledialogs.c deleted file mode 100644 index 329f17b..0000000 --- a/tools/rGuiLayout/src/external/tinyfiledialogs.c +++ /dev/null @@ -1,7370 +0,0 @@ -/*_________ - / \ tinyfiledialogs.c v3.3.1 [Feb 16, 2018] zlib licence - |tiny file| Unique code file created [November 9, 2014] - | dialogs | Copyright (c) 2014 - 2018 Guillaume Vareille http://ysengrin.com - \____ ___/ http://tinyfiledialogs.sourceforge.net - \| git clone http://git.code.sf.net/p/tinyfiledialogs/code tinyfd - ____________________________________________ - | | - | email: tinyfiledialogs at ysengrin.com | - |____________________________________________| - ___________________________________________________________________ - | | - | the windows only wchar_t UTF-16 prototypes are in the header file | - |___________________________________________________________________| - -Please 1) let me know If you are using it on exotic hardware / OS / compiler - 2) leave a 1-word review on Sourceforge. - 3) upvote my stackoverflow answer/advert https://stackoverflow.com/a/47651444 - -tiny file dialogs (cross-platform C C++) -InputBox PasswordBox MessageBox ColorPicker -OpenFileDialog SaveFileDialog SelectFolderDialog -Native dialog library for WINDOWS MAC OSX GTK+ QT CONSOLE & more -SSH supported via automatic switch to console mode or X11 forwarding - -a C file + a header (add them to your C or C++ project) with 8 functions: -- beep -- notify popup -- message & question -- input & password -- save file -- open file(s) -- select folder -- color picker - -Complements OpenGL GLFW GLUT GLUI VTK SFML TGUI SDL Ogre Unity3d ION OpenCV -CEGUI MathGL GLM CPW GLOW IMGUI MyGUI GLT NGL STB & GUI less programs - -NO INIT -NO MAIN LOOP -NO LINKING -NO INCLUDE - -The dialogs can be forced into console mode - -Windows (XP to 10) ASCII MBCS UTF-8 UTF-16 -- native code & vbs create the graphic dialogs -- enhanced console mode can use dialog.exe from -http://andrear.altervista.org/home/cdialog.php -- basic console input - -Unix (command line calls) ASCII UTF-8 -- applescript, kdialog, zenity -- python (2 or 3) + tkinter + python-dbus (optional) -- dialog (opens a console if needed) -- basic console input -The same executable can run across desktops & distributions - -C89 & C++98 compliant: tested with C & C++ compilers -VisualStudio MinGW-gcc GCC Clang TinyCC OpenWatcom-v2 BorlandC SunCC -on Windows Mac Linux Bsd Solaris Minix Raspbian -using Gnome Kde Enlightenment Mate Cinnamon Unity Lxde Lxqt Xfce -WindowMaker IceWm Cde Jds OpenBox Awesome Jwm Xdm - -Bindings for LUA and C# dll, Haskell -Included in LWJGL(java), Rust, Allegrobasic - -Thanks for contributions, bug corrections & thorough testing to: -- Don Heyse http://ldglite.sf.net for bug corrections & thorough testing! -- Paul Rouget - -- License - - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not -claim that you wrote the original software. If you use this software -in a product, an acknowledgment in the product documentation would be -appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be -misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#define _POSIX_C_SOURCE 2 /* to accept POSIX 2 in old ANSI C standards */ -#include -#include -#include -#include -#include - -#include "tinyfiledialogs.h" -/* #define TINYFD_NOLIB */ - -#ifdef _WIN32 - #ifdef __BORLANDC__ - #define _getch getch - #endif - #ifndef _WIN32_WINNT - #define _WIN32_WINNT 0x0500 - #endif - #ifndef TINYFD_NOLIB - #include - /*#define TINYFD_NOSELECTFOLDERWIN*/ - #ifndef TINYFD_NOSELECTFOLDERWIN - #include - #endif /*TINYFD_NOSELECTFOLDERWIN*/ - #endif - #include - #include - #define TINYFD_NOCCSUNICODE - #define SLASH "\\" - int tinyfd_winUtf8 = 0 ; /* on windows string char can be 0:MBCS or 1:UTF-8 */ -#else - #include - #include - #include /* on old systems try instead */ - #include - #include - #include /* on old systems try instead */ - #define SLASH "/" -#endif /* _WIN32 */ - -#define MAX_PATH_OR_CMD 1024 /* _MAX_PATH or MAX_PATH */ -#define MAX_MULTIPLE_FILES 32 - -char tinyfd_version [8] = "3.3.1"; - -int tinyfd_verbose = 0 ; /* on unix: prints the command line calls */ - -#if defined(TINYFD_NOLIB) && defined(_WIN32) -int tinyfd_forceConsole = 1 ; -#else -int tinyfd_forceConsole = 0 ; /* 0 (default) or 1 */ -#endif -/* for unix & windows: 0 (graphic mode) or 1 (console mode). -0: try to use a graphic solution, if it fails then it uses console mode. -1: forces all dialogs into console mode even when the X server is present, - if the package dialog (and a console is present) or dialog.exe is installed. - on windows it only make sense for console applications */ - -char tinyfd_response[1024]; -/* if you pass "tinyfd_query" as aTitle, -the functions will not display the dialogs -but and return 0 for console mode, 1 for graphic mode. -tinyfd_response is then filled with the retain solution. -possible values for tinyfd_response are (all lowercase) -for graphic mode: - windows_wchar windows - applescript kdialog zenity zenity3 matedialog qarma - python2-tkinter python3-tkinter python-dbus perl-dbus - gxmessage gmessage xmessage xdialog gdialog -for console mode: - dialog whiptail basicinput */ - -#if defined(TINYFD_NOLIB) && defined(_WIN32) -static int gWarningDisplayed = 1 ; -#else -static int gWarningDisplayed = 0 ; -#endif - -static char gTitle[]="missing software! (we will try basic console input)"; - -#ifdef _WIN32 -char tinyfd_needs[] = "\ - ___________\n\ -/ \\ \n\ -| tiny file |\n\ -| dialogs |\n\ -\\_____ ____/\n\ - \\|\ -\ntiny file dialogs on Windows needs:\ -\n a graphic display\ -\nor dialog.exe (enhanced console mode)\ -\nor a console for basic input"; -#else -char tinyfd_needs[] = "\ - ___________\n\ -/ \\ \n\ -| tiny file |\n\ -| dialogs |\n\ -\\_____ ____/\n\ - \\|\ -\ntiny file dialogs on UNIX needs:\ -\n applescript\ -\nor kdialog\ -\nor zenity (or matedialog or qarma)\ -\nor python (2 or 3)\ -\n + tkinter + python-dbus (optional)\ -\nor dialog (opens console if needed)\ -\nor xterm + bash\ -\n (opens console for basic input)\ -\nor existing console for basic input"; -#endif - -#ifdef _MSC_VER -#pragma warning(disable:4996) /* allows usage of strncpy, strcpy, strcat, sprintf, fopen */ -#pragma warning(disable:4100) /* allows usage of strncpy, strcpy, strcat, sprintf, fopen */ -#pragma warning(disable:4706) /* allows usage of strncpy, strcpy, strcat, sprintf, fopen */ -#endif - -static char * getPathWithoutFinalSlash( - char * const aoDestination, /* make sure it is allocated, use _MAX_PATH */ - char const * const aSource) /* aoDestination and aSource can be the same */ -{ - char const * lTmp ; - if ( aSource ) - { - lTmp = strrchr(aSource, '/'); - if (!lTmp) - { - lTmp = strrchr(aSource, '\\'); - } - if (lTmp) - { - strncpy(aoDestination, aSource, lTmp - aSource ); - aoDestination[lTmp - aSource] = '\0'; - } - else - { - * aoDestination = '\0'; - } - } - else - { - * aoDestination = '\0'; - } - return aoDestination; -} - - -static char * getLastName( - char * const aoDestination, /* make sure it is allocated */ - char const * const aSource) -{ - /* copy the last name after '/' or '\' */ - char const * lTmp ; - if ( aSource ) - { - lTmp = strrchr(aSource, '/'); - if (!lTmp) - { - lTmp = strrchr(aSource, '\\'); - } - if (lTmp) - { - strcpy(aoDestination, lTmp + 1); - } - else - { - strcpy(aoDestination, aSource); - } - } - else - { - * aoDestination = '\0'; - } - return aoDestination; -} - - -static void ensureFinalSlash( char * const aioString ) -{ - if ( aioString && strlen( aioString ) ) - { - char * lastcar = aioString + strlen( aioString ) - 1 ; - if ( strncmp( lastcar , SLASH , 1 ) ) - { - strcat( lastcar , SLASH ) ; - } - } -} - - -static void Hex2RGB( char const aHexRGB [8] , - unsigned char aoResultRGB [3] ) -{ - char lColorChannel [8] ; - if ( aoResultRGB ) - { - if ( aHexRGB ) - { - strcpy(lColorChannel, aHexRGB ) ; - aoResultRGB[2] = (unsigned char)strtoul(lColorChannel+5,NULL,16); - lColorChannel[5] = '\0'; - aoResultRGB[1] = (unsigned char)strtoul(lColorChannel+3,NULL,16); - lColorChannel[3] = '\0'; - aoResultRGB[0] = (unsigned char)strtoul(lColorChannel+1,NULL,16); -/* printf("%d %d %d\n", aoResultRGB[0], aoResultRGB[1], aoResultRGB[2]); */ - } - else - { - aoResultRGB[0]=0; - aoResultRGB[1]=0; - aoResultRGB[2]=0; - } - } -} - -static void RGB2Hex( unsigned char const aRGB [3] , - char aoResultHexRGB [8] ) -{ - if ( aoResultHexRGB ) - { - if ( aRGB ) - { -#if defined(__GNUC__) && defined(_WIN32) - sprintf(aoResultHexRGB, "#%02hx%02hx%02hx", -#else - sprintf(aoResultHexRGB, "#%02hhx%02hhx%02hhx", -#endif - aRGB[0], aRGB[1], aRGB[2]); - /* printf("aoResultHexRGB %s\n", aoResultHexRGB); */ - } - else - { - aoResultHexRGB[0]=0; - aoResultHexRGB[1]=0; - aoResultHexRGB[2]=0; - } - } -} - - -static void replaceSubStr( char const * const aSource , - char const * const aOldSubStr , - char const * const aNewSubStr , - char * const aoDestination ) -{ - char const * pOccurence ; - char const * p ; - char const * lNewSubStr = "" ; - size_t lOldSubLen = strlen( aOldSubStr ) ; - - if ( ! aSource ) - { - * aoDestination = '\0' ; - return ; - } - if ( ! aOldSubStr ) - { - strcpy( aoDestination , aSource ) ; - return ; - } - if ( aNewSubStr ) - { - lNewSubStr = aNewSubStr ; - } - p = aSource ; - * aoDestination = '\0' ; - while ( ( pOccurence = strstr( p , aOldSubStr ) ) != NULL ) - { - strncat( aoDestination , p , pOccurence - p ) ; - strcat( aoDestination , lNewSubStr ) ; - p = pOccurence + lOldSubLen ; - } - strcat( aoDestination , p ) ; -} - - -static int filenameValid( char const * const aFileNameWithoutPath ) -{ - if ( ! aFileNameWithoutPath - || ! strlen(aFileNameWithoutPath) - || strpbrk(aFileNameWithoutPath , "\\/:*?\"<>|") ) - { - return 0 ; - } - return 1 ; -} - -#ifndef _WIN32 - -static int fileExists( char const * const aFilePathAndName ) -{ - FILE * lIn ; - if ( ! aFilePathAndName || ! strlen(aFilePathAndName) ) - { - return 0 ; - } - lIn = fopen( aFilePathAndName , "r" ) ; - if ( ! lIn ) - { - return 0 ; - } - fclose( lIn ) ; - return 1 ; -} - -#elif defined(TINYFD_NOLIB) - -static int fileExists( char const * const aFilePathAndName ) -{ - FILE * lIn ; - if ( ! aFilePathAndName || ! strlen(aFilePathAndName) ) - { - return 0 ; - } - - if ( tinyfd_winUtf8 ) - return 1; /* we cannot test */ - - lIn = fopen( aFilePathAndName , "r" ) ; - if ( ! lIn ) - { - return 0 ; - } - fclose( lIn ) ; - return 1 ; -} - -#endif - - -static void wipefile(char const * const aFilename) -{ - int i; - struct stat st; - FILE * lIn; - - if (stat(aFilename, &st) == 0) - { - if ((lIn = fopen(aFilename, "w"))) - { - for (i = 0; i < st.st_size; i++) - { - fputc('A', lIn); - } - } - fclose(lIn); - } -} - - -#ifdef _WIN32 - -static int replaceChr( char * const aString , - char const aOldChr , - char const aNewChr ) -{ - char * p ; - int lRes = 0 ; - - if ( ! aString ) - { - return 0 ; - } - - if ( aOldChr == aNewChr ) - { - return 0 ; - } - - p = aString ; - while ( (p = strchr( p , aOldChr )) ) - { - * p = aNewChr ; - p ++ ; - lRes = 1 ; - } - return lRes ; -} - -#ifdef TINYFD_NOLIB - -static int dirExists(char const * const aDirPath) -{ - struct stat lInfo; - - if (!aDirPath || !strlen(aDirPath)) - return 0; - if (stat(aDirPath, &lInfo) != 0) - return 0; - else if ( tinyfd_winUtf8 ) - return 1; /* we cannot test */ - else if (lInfo.st_mode & S_IFDIR) - return 1; - else - return 0; -} - - -void tinyfd_beep() -{ - printf("\a"); -} - -#else /* ndef TINYFD_NOLIB */ - -void tinyfd_beep() -{ - Beep(440,300); -} - - -static void wipefileW(wchar_t const * const aFilename) -{ - int i; - struct _stat st; - FILE * lIn; - - if (_wstat(aFilename, &st) == 0) - { - if ((lIn = _wfopen(aFilename, L"w"))) - { - for (i = 0; i < st.st_size; i++) - { - fputc('A', lIn); - } - } - fclose(lIn); - } -} - - -static wchar_t * getPathWithoutFinalSlashW( - wchar_t * const aoDestination, /* make sure it is allocated, use _MAX_PATH */ - wchar_t const * const aSource) /* aoDestination and aSource can be the same */ -{ - wchar_t const * lTmp; - if (aSource) - { - lTmp = wcsrchr(aSource, L'/'); - if (!lTmp) - { - lTmp = wcsrchr(aSource, L'\\'); - } - if (lTmp) - { - wcsncpy(aoDestination, aSource, lTmp - aSource); - aoDestination[lTmp - aSource] = L'\0'; - } - else - { - *aoDestination = L'\0'; - } - } - else - { - *aoDestination = L'\0'; - } - return aoDestination; -} - - -static wchar_t * getLastNameW( - wchar_t * const aoDestination, /* make sure it is allocated */ - wchar_t const * const aSource) -{ - /* copy the last name after '/' or '\' */ - wchar_t const * lTmp; - if (aSource) - { - lTmp = wcsrchr(aSource, L'/'); - if (!lTmp) - { - lTmp = wcsrchr(aSource, L'\\'); - } - if (lTmp) - { - wcscpy(aoDestination, lTmp + 1); - } - else - { - wcscpy(aoDestination, aSource); - } - } - else - { - *aoDestination = L'\0'; - } - return aoDestination; -} - - -static void Hex2RGBW(wchar_t const aHexRGB[8], - unsigned char aoResultRGB[3]) -{ - wchar_t lColorChannel[8]; - if (aoResultRGB) - { - if (aHexRGB) - { - wcscpy(lColorChannel, aHexRGB); - aoResultRGB[2] = (unsigned char)wcstoul(lColorChannel + 5, NULL, 16); - lColorChannel[5] = '\0'; - aoResultRGB[1] = (unsigned char)wcstoul(lColorChannel + 3, NULL, 16); - lColorChannel[3] = '\0'; - aoResultRGB[0] = (unsigned char)wcstoul(lColorChannel + 1, NULL, 16); - /* printf("%d %d %d\n", aoResultRGB[0], aoResultRGB[1], aoResultRGB[2]); */ - } - else - { - aoResultRGB[0] = 0; - aoResultRGB[1] = 0; - aoResultRGB[2] = 0; - } - } -} - - -static void RGB2HexW( - unsigned char const aRGB[3], - wchar_t aoResultHexRGB[8]) -{ - if (aoResultHexRGB) - { - if (aRGB) - { - /* wprintf(L"aoResultHexRGB %s\n", aoResultHexRGB); */ - swprintf(aoResultHexRGB, -#if !defined(__BORLANDC__) && !defined(__TINYC__) && ( !defined(__GNUC__) || (__GNUC__) >= 5 ) - 8, -#endif - L"#%02hhx%02hhx%02hhx", aRGB[0], aRGB[1], aRGB[2]); - } - else - { - aoResultHexRGB[0] = 0; - aoResultHexRGB[1] = 0; - aoResultHexRGB[2] = 0; - } - } -} - - -#if !defined(WC_ERR_INVALID_CHARS) -/* undefined prior to Vista, so not yet in MINGW header file */ -#define WC_ERR_INVALID_CHARS 0x00000080 -#endif - - -static int sizeUtf16(char const * const aUtf8string) -{ - return MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, - aUtf8string, -1, NULL, 0); -} - - -static int sizeUtf8(wchar_t const * const aUtf16string) -{ - return WideCharToMultiByte(CP_UTF8, WC_ERR_INVALID_CHARS, - aUtf16string, -1, NULL, 0, NULL, NULL); -} - - -static int sizeMbcs(wchar_t const * const aMbcsString) -{ - int lRes = WideCharToMultiByte(CP_ACP, 0, - aMbcsString, -1, NULL, 0, NULL, NULL); - /* DWORD licic = GetLastError(); */ - return lRes; -} - - -static wchar_t * utf8to16(char const * const aUtf8string) -{ - wchar_t * lUtf16string ; - int lSize = sizeUtf16(aUtf8string); - lUtf16string = (wchar_t *) malloc( lSize * sizeof(wchar_t) ); - lSize = MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, - aUtf8string, -1, lUtf16string, lSize); - if (lSize == 0) - { - free(lUtf16string); - return NULL; - } - return lUtf16string; -} - - -static wchar_t * mbcsTo16(char const * const aMbcsString) -{ - wchar_t * lMbcsString; - int lSize = sizeUtf16(aMbcsString); - lMbcsString = (wchar_t *)malloc(lSize * sizeof(wchar_t)); - lSize = MultiByteToWideChar(CP_ACP, 0, - aMbcsString, -1, lMbcsString, lSize); - if (lSize == 0) - { - free(lMbcsString); - return NULL; - } - return lMbcsString; -} - - -static char * utf16to8(wchar_t const * const aUtf16string) -{ - char * lUtf8string ; - int lSize = sizeUtf8(aUtf16string); - lUtf8string = (char *) malloc( lSize ); - lSize = WideCharToMultiByte(CP_UTF8, WC_ERR_INVALID_CHARS, - aUtf16string, -1, lUtf8string, lSize, NULL, NULL); - if (lSize == 0) - { - free(lUtf8string); - return NULL; - } - return lUtf8string; -} - - -static char * utf16toMbcs(wchar_t const * const aUtf16string) -{ - char * lMbcsString; - int lSize = sizeMbcs(aUtf16string); - lMbcsString = (char *)malloc(lSize); - lSize = WideCharToMultiByte(CP_ACP, 0, - aUtf16string, -1, lMbcsString, lSize, NULL, NULL); - if (lSize == 0) - { - free(lMbcsString); - return NULL; - } - return lMbcsString; -} - - -static int dirExists(char const * const aDirPath) -{ - struct _stat lInfo; - wchar_t * lTmpWChar; - int lStatRet; - - if (!aDirPath || !strlen(aDirPath)) - return 0; - - if (tinyfd_winUtf8) - { - lTmpWChar = utf8to16(aDirPath); - lStatRet = _wstat(lTmpWChar, &lInfo); - free(lTmpWChar); - if (lStatRet != 0) - return 0; - else if (lInfo.st_mode & S_IFDIR) - return 1; - else - return 0; - } - else if (_stat(aDirPath, &lInfo) != 0) - return 0; - else if (lInfo.st_mode & S_IFDIR) - return 1; - else - return 0; -} - - -static int fileExists(char const * const aFilePathAndName) -{ - struct _stat lInfo; - wchar_t * lTmpWChar; - int lStatRet; - FILE * lIn; - - if (!aFilePathAndName || !strlen(aFilePathAndName)) - { - return 0; - } - - if (tinyfd_winUtf8) - { - lTmpWChar = utf8to16(aFilePathAndName); - lStatRet = _wstat(lTmpWChar, &lInfo); - free(lTmpWChar); - if (lStatRet != 0) - return 0; - else if (lInfo.st_mode & _S_IFREG) - return 1; - else - return 0; - } - else - { - lIn = fopen(aFilePathAndName, "r"); - if (!lIn) - { - return 0; - } - fclose(lIn); - return 1; - } -} - -#endif /* TINYFD_NOLIB */ -#endif /* _WIN32 */ - -/* source and destination can be the same or ovelap*/ -static char const * ensureFilesExist(char * const aDestination, - char const * const aSourcePathsAndNames) -{ - char * lDestination = aDestination; - char const * p; - char const * p2; - size_t lLen; - - if (!aSourcePathsAndNames) - { - return NULL; - } - lLen = strlen(aSourcePathsAndNames); - if (!lLen) - { - return NULL; - } - - p = aSourcePathsAndNames; - while ((p2 = strchr(p, '|')) != NULL) - { - lLen = p2 - p; - memmove(lDestination, p, lLen); - lDestination[lLen] = '\0'; - if (fileExists(lDestination)) - { - lDestination += lLen; - *lDestination = '|'; - lDestination++; - } - p = p2 + 1; - } - if (fileExists(p)) - { - lLen = strlen(p); - memmove(lDestination, p, lLen); - lDestination[lLen] = '\0'; - } - else - { - *(lDestination - 1) = '\0'; - } - return aDestination; -} - -#ifdef _WIN32 -#ifndef TINYFD_NOLIB - -static int __stdcall EnumThreadWndProc(HWND hwnd, LPARAM lParam) -{ - wchar_t lTitleName[MAX_PATH]; - GetWindowTextW(hwnd, lTitleName, MAX_PATH); - /* wprintf(L"lTitleName %ls \n", lTitleName); */ - if (wcscmp(L"tinyfiledialogsTopWindow", lTitleName) == 0) - { - SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); - return 0; - } - return 1; -} - - -static void hiddenConsoleW(wchar_t const * const aString, wchar_t const * const aDialogTitle, int const aInFront) -{ - STARTUPINFOW StartupInfo; - PROCESS_INFORMATION ProcessInfo; - - if (!aString || !wcslen(aString) ) return; - - memset(&StartupInfo, 0, sizeof(StartupInfo)); - StartupInfo.cb = sizeof(STARTUPINFOW); - StartupInfo.dwFlags = STARTF_USESHOWWINDOW; - StartupInfo.wShowWindow = SW_HIDE; - - if (!CreateProcessW(NULL, (LPWSTR)aString, NULL, NULL, FALSE, - CREATE_NEW_CONSOLE, NULL, NULL, - &StartupInfo, &ProcessInfo)) - { - return; /* GetLastError(); */ - } - - WaitForInputIdle(ProcessInfo.hProcess, INFINITE); - if (aInFront) - { - while (EnumWindows(EnumThreadWndProc, (LPARAM)NULL)) {} - SetWindowTextW(GetForegroundWindow(), aDialogTitle); - } - WaitForSingleObject(ProcessInfo.hProcess, INFINITE); - CloseHandle(ProcessInfo.hThread); - CloseHandle(ProcessInfo.hProcess); -} - - -int tinyfd_messageBoxW( - wchar_t const * const aTitle, /* NULL or "" */ - wchar_t const * const aMessage, /* NULL or "" may contain \n and \t */ - wchar_t const * const aDialogType, /* "ok" "okcancel" "yesno" "yesnocancel" */ - wchar_t const * const aIconType, /* "info" "warning" "error" "question" */ - int const aDefaultButton) /* 0 for cancel/no , 1 for ok/yes , 2 for no in yesnocancel */ -{ - int lBoxReturnValue; - UINT aCode; - - if (aTitle&&!wcscmp(aTitle, L"tinyfd_query")){ strcpy(tinyfd_response, "windows_wchar"); return 1; } - - if (aIconType && !wcscmp(L"warning", aIconType)) - { - aCode = MB_ICONWARNING; - } - else if (aIconType && !wcscmp(L"error", aIconType)) - { - aCode = MB_ICONERROR; - } - else if (aIconType && !wcscmp(L"question", aIconType)) - { - aCode = MB_ICONQUESTION; - } - else - { - aCode = MB_ICONINFORMATION; - } - - if (aDialogType && !wcscmp(L"okcancel", aDialogType)) - { - aCode += MB_OKCANCEL; - if (!aDefaultButton) - { - aCode += MB_DEFBUTTON2; - } - } - else if (aDialogType && !wcscmp(L"yesno", aDialogType)) - { - aCode += MB_YESNO; - if (!aDefaultButton) - { - aCode += MB_DEFBUTTON2; - } - } - else - { - aCode += MB_OK; - } - - aCode += MB_TOPMOST; - - lBoxReturnValue = MessageBoxW(GetForegroundWindow(), aMessage, aTitle, aCode); - if (((aDialogType - && wcscmp(L"okcancel", aDialogType) - && wcscmp(L"yesno", aDialogType))) - || (lBoxReturnValue == IDOK) - || (lBoxReturnValue == IDYES)) - { - return 1; - } - else - { - return 0; - } -} - - -static int messageBoxWinGui8( - char const * const aTitle, /* NULL or "" */ - char const * const aMessage, /* NULL or "" may contain \n and \t */ - char const * const aDialogType, /* "ok" "okcancel" "yesno" "yesnocancel" */ - char const * const aIconType, /* "info" "warning" "error" "question" */ - int const aDefaultButton) /* 0 for cancel/no , 1 for ok/yes , 2 for no in yesnocancel */ -{ - int lIntRetVal; - wchar_t * lTitle; - wchar_t * lMessage; - wchar_t * lDialogType; - wchar_t * lIconType; - - lTitle = utf8to16(aTitle); - lMessage = utf8to16(aMessage); - lDialogType = utf8to16(aDialogType); - lIconType = utf8to16(aIconType); - - lIntRetVal = tinyfd_messageBoxW(lTitle, lMessage, - lDialogType, lIconType, aDefaultButton ); - - free(lTitle); - free(lMessage); - free(lDialogType); - free(lIconType); - - return lIntRetVal ; -} - - -/* return has only meaning for tinyfd_query */ -int tinyfd_notifyPopupW( - wchar_t const * const aTitle, /* NULL or L"" */ - wchar_t const * const aMessage, /* NULL or L"" may contain \n \t */ - wchar_t const * const aIconType) /* L"info" L"warning" L"error" */ -{ - wchar_t * lDialogString; - size_t lTitleLen; - size_t lMessageLen; - size_t lDialogStringLen; - - if (aTitle&&!wcscmp(aTitle, L"tinyfd_query")){ strcpy(tinyfd_response, "windows_wchar"); return 1; } - - lTitleLen = aTitle ? wcslen(aTitle) : 0; - lMessageLen = aMessage ? wcslen(aMessage) : 0; - lDialogStringLen = 3 * MAX_PATH_OR_CMD + lTitleLen + lMessageLen; - lDialogString = (wchar_t *)malloc(2 * lDialogStringLen); - - wcscpy(lDialogString, L"powershell.exe -command \"\ -function Show-BalloonTip {\ -[cmdletbinding()] \ -param( \ -[string]$Title = ' ', \ -[string]$Message = ' ', \ -[ValidateSet('info', 'warning', 'error')] \ -[string]$IconType = 'info');\ -[system.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms') | Out-Null ; \ -$balloon = New-Object System.Windows.Forms.NotifyIcon ; \ -$path = Get-Process -id $pid | Select-Object -ExpandProperty Path ; \ -$icon = [System.Drawing.Icon]::ExtractAssociatedIcon($path) ;"); - - wcscat(lDialogString, L"\ -$balloon.Icon = $icon ; \ -$balloon.BalloonTipIcon = $IconType ; \ -$balloon.BalloonTipText = $Message ; \ -$balloon.BalloonTipTitle = $Title ; \ -$balloon.Text = 'lalala' ; \ -$balloon.Visible = $true ; \ -$balloon.ShowBalloonTip(5000)};\ -Show-BalloonTip"); - - if (aTitle && wcslen(aTitle)) - { - wcscat(lDialogString, L" -Title '"); - wcscat(lDialogString, aTitle); - wcscat(lDialogString, L"'"); - } - if (aMessage && wcslen(aMessage)) - { - wcscat(lDialogString, L" -Message '"); - wcscat(lDialogString, aMessage); - wcscat(lDialogString, L"'"); - } - if (aMessage && wcslen(aIconType)) - { - wcscat(lDialogString, L" -IconType '"); - wcscat(lDialogString, aIconType); - wcscat(lDialogString, L"'"); - } - wcscat(lDialogString, L"\""); - - /* wprintf ( L"lDialogString: %ls\n" , lDialogString ) ; */ - - hiddenConsoleW(lDialogString, aTitle, 0); - free(lDialogString); - return 1; -} - - -static int notifyWinGui( - char const * const aTitle, /* NULL or "" */ - char const * const aMessage, /* NULL or "" may NOT contain \n nor \t */ - char const * const aIconType) -{ - wchar_t * lTitle; - wchar_t * lMessage; - wchar_t * lIconType; - - if (tinyfd_winUtf8) - { - lTitle = utf8to16(aTitle); - lMessage = utf8to16(aMessage); - lIconType = utf8to16(aIconType); - } - else - { - lTitle = mbcsTo16(aTitle); - lMessage = mbcsTo16(aMessage); - lIconType = mbcsTo16(aIconType); - } - - tinyfd_notifyPopupW( lTitle, lMessage, lIconType); - - free(lTitle); - free(lMessage); - free(lIconType); - return 1; -} - - -wchar_t const * tinyfd_inputBoxW( - wchar_t const * const aTitle, /* NULL or L"" */ - wchar_t const * const aMessage, /* NULL or L"" may NOT contain \n nor \t */ - wchar_t const * const aDefaultInput) /* L"" , if NULL it's a passwordBox */ -{ - static wchar_t lBuff[MAX_PATH_OR_CMD]; - wchar_t * lDialogString; - FILE * lIn; - FILE * lFile; - int lResult; - size_t lTitleLen; - size_t lMessageLen; - size_t lDialogStringLen; - - if (aTitle&&!wcscmp(aTitle, L"tinyfd_query")){ strcpy(tinyfd_response, "windows_wchar"); return (wchar_t const *)1; } - - lTitleLen = aTitle ? wcslen(aTitle) : 0 ; - lMessageLen = aMessage ? wcslen(aMessage) : 0 ; - lDialogStringLen = 3 * MAX_PATH_OR_CMD + lTitleLen + lMessageLen; - lDialogString = (wchar_t *)malloc(2 * lDialogStringLen); - - if (aDefaultInput) - { - swprintf(lDialogString, -#if !defined(__BORLANDC__) && !defined(__TINYC__) && ( !defined(__GNUC__) || (__GNUC__) >= 5 ) - lDialogStringLen, -#endif - L"%ls\\AppData\\Local\\Temp\\tinyfd.vbs", _wgetenv(L"USERPROFILE")); - } - else - { - swprintf(lDialogString, -#if !defined(__BORLANDC__) && !defined(__TINYC__) && ( !defined(__GNUC__) || (__GNUC__) >= 5 ) - lDialogStringLen, -#endif - L"%ls\\AppData\\Local\\Temp\\tinyfd.hta", _wgetenv(L"USERPROFILE")); - } - lIn = _wfopen(lDialogString, L"w"); - if (!lIn) - { - free(lDialogString); - return NULL; - } - - if ( aDefaultInput ) - { - wcscpy(lDialogString, L"Dim result:result=InputBox(\""); - if (aMessage && wcslen(aMessage)) - { - wcscat(lDialogString, aMessage); - } - wcscat(lDialogString, L"\",\"tinyfiledialogsTopWindow\",\""); - if (aDefaultInput && wcslen(aDefaultInput)) - { - wcscat(lDialogString, aDefaultInput); - } - wcscat(lDialogString, L"\"):If IsEmpty(result) then:WScript.Echo 0"); - wcscat(lDialogString, L":Else: WScript.Echo \"1\" & result : End If"); - } - else - { - wcscpy(lDialogString, L"\n\ -\n\ -\n\ -"); - - wcscat(lDialogString, L"tinyfiledialogsTopWindow"); - wcscat(lDialogString, L"\n\ -\n\ -\n\ -\n\ -\n\ -\n\ -\n\ -\n\ -\n\ -\n\ -\n\ -
\n"); - - wcscat(lDialogString, aMessage ? aMessage : L""); - - wcscat(lDialogString, L"\n\ -\n\ -\n\ -\n\ -
\n\ -

\n\ -\n\ -
\n\ -
\n"); - - wcscat(lDialogString, L"\n\ -\n\ -\n\ -\n\ -
\n\ -
\n\ -
\n\ -\n\ -\n\ -" ) ; - } - fputws(lDialogString, lIn); - fclose(lIn); - - if (aDefaultInput) - { - swprintf(lDialogString, -#if !defined(__BORLANDC__) && !defined(__TINYC__) && ( !defined(__GNUC__) || (__GNUC__) >= 5 ) - lDialogStringLen, -#endif - L"%ls\\AppData\\Local\\Temp\\tinyfd.txt",_wgetenv(L"USERPROFILE")); - -#ifdef TINYFD_NOCCSUNICODE - lFile = _wfopen(lDialogString, L"w"); - fputc(0xFF, lFile); - fputc(0xFE, lFile); -#else - lFile = _wfopen(lDialogString, L"wt, ccs=UNICODE"); /*or ccs=UTF-16LE*/ -#endif - fclose(lFile); - - wcscpy(lDialogString, L"cmd.exe /c cscript.exe //U //Nologo "); - wcscat(lDialogString, L"%USERPROFILE%\\AppData\\Local\\Temp\\tinyfd.vbs "); - wcscat(lDialogString, L">> %USERPROFILE%\\AppData\\Local\\Temp\\tinyfd.txt"); - } - else - { - wcscpy(lDialogString, - L"cmd.exe /c mshta.exe %USERPROFILE%\\AppData\\Local\\Temp\\tinyfd.hta"); - } - - /* wprintf ( "lDialogString: %ls\n" , lDialogString ) ; */ - - hiddenConsoleW(lDialogString, aTitle, 1); - - swprintf(lDialogString, -#if !defined(__BORLANDC__) && !defined(__TINYC__) && ( !defined(__GNUC__) || (__GNUC__) >= 5 ) - lDialogStringLen, -#endif - L"%ls\\AppData\\Local\\Temp\\tinyfd.txt", _wgetenv(L"USERPROFILE")); - /* wprintf(L"lDialogString: %ls\n", lDialogString); */ -#ifdef TINYFD_NOCCSUNICODE - if (!(lIn = _wfopen(lDialogString, L"r"))) -#else - if (!(lIn = _wfopen(lDialogString, L"rt, ccs=UNICODE"))) /*or ccs=UTF-16LE*/ -#endif - { - _wremove(lDialogString); - free(lDialogString); - return NULL; - } -#ifdef TINYFD_NOCCSUNICODE - fgets((char *)lBuff, 2*MAX_PATH_OR_CMD, lIn); -#else - fgetws(lBuff, MAX_PATH_OR_CMD, lIn); -#endif - fclose(lIn); - wipefileW(lDialogString); - _wremove(lDialogString); - - if (aDefaultInput) - { - swprintf(lDialogString, -#if !defined(__BORLANDC__) && !defined(__TINYC__) && ( !defined(__GNUC__) || (__GNUC__) >= 5 ) - lDialogStringLen, -#endif - L"%ls\\AppData\\Local\\Temp\\tinyfd.vbs", - _wgetenv(L"USERPROFILE")); - } - else - { - swprintf(lDialogString, -#if !defined(__BORLANDC__) && !defined(__TINYC__) && ( !defined(__GNUC__) || (__GNUC__) >= 5 ) - lDialogStringLen, -#endif - L"%ls\\AppData\\Local\\Temp\\tinyfd.hta", - _wgetenv(L"USERPROFILE")); - } - _wremove(lDialogString); - free(lDialogString); - /* wprintf( L"lBuff: %ls\n" , lBuff ) ; */ -#ifdef TINYFD_NOCCSUNICODE - lResult = !wcsncmp(lBuff+1, L"1", 1); -#else - lResult = !wcsncmp(lBuff, L"1", 1); -#endif - - /* printf( "lResult: %d \n" , lResult ) ; */ - if (!lResult) - { - return NULL ; - } - - /* wprintf( "lBuff+1: %ls\n" , lBuff+1 ) ; */ -#ifdef TINYFD_NOCCSUNICODE - return lBuff + 2; -#else - return lBuff + 1; -#endif -} - - -static char const * inputBoxWinGui( - char * const aoBuff, - char const * const aTitle, /* NULL or "" */ - char const * const aMessage, /* NULL or "" may NOT contain \n nor \t */ - char const * const aDefaultInput) /* "" , if NULL it's a passwordBox */ -{ - wchar_t * lTitle; - wchar_t * lMessage; - wchar_t * lDefaultInput; - wchar_t const * lTmpWChar; - char * lTmpChar; - - if (tinyfd_winUtf8) - { - lTitle = utf8to16(aTitle); - lMessage = utf8to16(aMessage); - lDefaultInput = utf8to16(aDefaultInput); - } - else - { - lTitle = mbcsTo16(aTitle); - lMessage = mbcsTo16(aMessage); - lDefaultInput = mbcsTo16(aDefaultInput); - } - - lTmpWChar = tinyfd_inputBoxW( lTitle, lMessage, lDefaultInput); - - free(lTitle); - free(lMessage); - free(lDefaultInput); - - if (!lTmpWChar) - { - return NULL; - } - - if (tinyfd_winUtf8) - { - lTmpChar = utf16to8(lTmpWChar); - } - else - { - lTmpChar = utf16toMbcs(lTmpWChar); - } - strcpy(aoBuff, lTmpChar); - free(lTmpChar); - - return aoBuff; -} - - -wchar_t const * tinyfd_saveFileDialogW( - wchar_t const * const aTitle, /* NULL or "" */ - wchar_t const * const aDefaultPathAndFile, /* NULL or "" */ - int const aNumOfFilterPatterns, /* 0 */ - wchar_t const * const * const aFilterPatterns, /* NULL or {"*.jpg","*.png"} */ - wchar_t const * const aSingleFilterDescription) /* NULL or "image files" */ -{ - static wchar_t lBuff[MAX_PATH_OR_CMD]; - wchar_t lDirname[MAX_PATH_OR_CMD]; - wchar_t lDialogString[MAX_PATH_OR_CMD]; - wchar_t lFilterPatterns[MAX_PATH_OR_CMD] = L""; - wchar_t * p; - wchar_t * lRetval; - int i; - HRESULT lHResult; - OPENFILENAMEW ofn = {0}; - - if (aTitle&&!wcscmp(aTitle, L"tinyfd_query")){ strcpy(tinyfd_response, "windows_wchar"); return (wchar_t const *)1; } - - lHResult = CoInitializeEx(NULL, 0); - - getPathWithoutFinalSlashW(lDirname, aDefaultPathAndFile); - getLastNameW(lBuff, aDefaultPathAndFile); - - if (aNumOfFilterPatterns > 0) - { - if (aSingleFilterDescription && wcslen(aSingleFilterDescription)) - { - wcscpy(lFilterPatterns, aSingleFilterDescription); - wcscat(lFilterPatterns, L"\n"); - } - wcscat(lFilterPatterns, aFilterPatterns[0]); - for (i = 1; i < aNumOfFilterPatterns; i++) - { - wcscat(lFilterPatterns, L";"); - wcscat(lFilterPatterns, aFilterPatterns[i]); - } - wcscat(lFilterPatterns, L"\n"); - if (!(aSingleFilterDescription && wcslen(aSingleFilterDescription))) - { - wcscpy(lDialogString, lFilterPatterns); - wcscat(lFilterPatterns, lDialogString); - } - wcscat(lFilterPatterns, L"All Files\n*.*\n"); - p = lFilterPatterns; - while ((p = wcschr(p, L'\n')) != NULL) - { - *p = L'\0'; - p++; - } - } - - ofn.lStructSize = sizeof(OPENFILENAMEW); - ofn.hwndOwner = GetForegroundWindow(); - ofn.hInstance = 0; - ofn.lpstrFilter = lFilterPatterns && wcslen(lFilterPatterns) ? lFilterPatterns : NULL; - ofn.lpstrCustomFilter = NULL; - ofn.nMaxCustFilter = 0; - ofn.nFilterIndex = 1; - ofn.lpstrFile = lBuff; - - ofn.nMaxFile = MAX_PATH_OR_CMD; - ofn.lpstrFileTitle = NULL; - ofn.nMaxFileTitle = MAX_PATH_OR_CMD/2; - ofn.lpstrInitialDir = lDirname && wcslen(lDirname) ? lDirname : NULL; - ofn.lpstrTitle = aTitle && wcslen(aTitle) ? aTitle : NULL; - ofn.Flags = OFN_OVERWRITEPROMPT | OFN_NOCHANGEDIR | OFN_PATHMUSTEXIST ; - ofn.nFileOffset = 0; - ofn.nFileExtension = 0; - ofn.lpstrDefExt = NULL; - ofn.lCustData = 0L; - ofn.lpfnHook = NULL; - ofn.lpTemplateName = NULL; - - if (GetSaveFileNameW(&ofn) == 0) - { - lRetval = NULL; - } - else - { - lRetval = lBuff; - } - - if (lHResult == S_OK || lHResult == S_FALSE) - { - CoUninitialize(); - } - return lRetval; -} - - -static char const * saveFileDialogWinGui8( - char * const aoBuff, - char const * const aTitle, /* NULL or "" */ - char const * const aDefaultPathAndFile, /* NULL or "" */ - int const aNumOfFilterPatterns, /* 0 */ - char const * const * const aFilterPatterns, /* NULL or {"*.jpg","*.png"} */ - char const * const aSingleFilterDescription) /* NULL or "image files" */ -{ - wchar_t * lTitle; - wchar_t * lDefaultPathAndFile; - wchar_t * lSingleFilterDescription; - wchar_t * * lFilterPatterns; - wchar_t const * lTmpWChar; - char * lTmpChar; - int i ; - - lFilterPatterns = (wchar_t **) malloc(aNumOfFilterPatterns*sizeof(wchar_t *)); - for (i = 0; i < aNumOfFilterPatterns; i++) - { - lFilterPatterns[i] = utf8to16(aFilterPatterns[i]); - } - - lTitle = utf8to16(aTitle); - lDefaultPathAndFile = utf8to16(aDefaultPathAndFile); - lSingleFilterDescription = utf8to16(aSingleFilterDescription); - - lTmpWChar = tinyfd_saveFileDialogW( - lTitle, - lDefaultPathAndFile, - aNumOfFilterPatterns, - (wchar_t const** ) /*stupid cast for gcc*/ - lFilterPatterns, - lSingleFilterDescription); - - free(lTitle); - free(lDefaultPathAndFile); - free(lSingleFilterDescription); - for (i = 0; i < aNumOfFilterPatterns; i++) - { - free(lFilterPatterns[i]); - } - free(lFilterPatterns); - - if (!lTmpWChar) - { - return NULL; - } - - lTmpChar = utf16to8(lTmpWChar); - strcpy(aoBuff, lTmpChar); - free(lTmpChar); - - return aoBuff; -} - - -wchar_t const * tinyfd_openFileDialogW( - wchar_t const * const aTitle, /* NULL or "" */ - wchar_t const * const aDefaultPathAndFile, /* NULL or "" */ - int const aNumOfFilterPatterns, /* 0 */ - wchar_t const * const * const aFilterPatterns, /* NULL or {"*.jpg","*.png"} */ - wchar_t const * const aSingleFilterDescription, /* NULL or "image files" */ - int const aAllowMultipleSelects) /* 0 or 1 */ -{ - static wchar_t lBuff[MAX_MULTIPLE_FILES*MAX_PATH_OR_CMD]; - - size_t lLengths[MAX_MULTIPLE_FILES]; - wchar_t lDirname[MAX_PATH_OR_CMD]; - wchar_t lFilterPatterns[MAX_PATH_OR_CMD] = L""; - wchar_t lDialogString[MAX_PATH_OR_CMD]; - wchar_t * lPointers[MAX_MULTIPLE_FILES]; - wchar_t * lRetval, * p; - int i, j; - size_t lBuffLen; - HRESULT lHResult; - OPENFILENAMEW ofn = { 0 }; - - if (aTitle&&!wcscmp(aTitle, L"tinyfd_query")){ strcpy(tinyfd_response, "windows_wchar"); return (wchar_t const *)1; } - - lHResult = CoInitializeEx(NULL, 0); - - getPathWithoutFinalSlashW(lDirname, aDefaultPathAndFile); - getLastNameW(lBuff, aDefaultPathAndFile); - - if (aNumOfFilterPatterns > 0) - { - if (aSingleFilterDescription && wcslen(aSingleFilterDescription)) - { - wcscpy(lFilterPatterns, aSingleFilterDescription); - wcscat(lFilterPatterns, L"\n"); - } - wcscat(lFilterPatterns, aFilterPatterns[0]); - for (i = 1; i < aNumOfFilterPatterns; i++) - { - wcscat(lFilterPatterns, L";"); - wcscat(lFilterPatterns, aFilterPatterns[i]); - } - wcscat(lFilterPatterns, L"\n"); - if (!(aSingleFilterDescription && wcslen(aSingleFilterDescription))) - { - wcscpy(lDialogString, lFilterPatterns); - wcscat(lFilterPatterns, lDialogString); - } - wcscat(lFilterPatterns, L"All Files\n*.*\n"); - p = lFilterPatterns; - while ((p = wcschr(p, L'\n')) != NULL) - { - *p = L'\0'; - p++; - } - } - - ofn.lStructSize = sizeof(OPENFILENAME); - ofn.hwndOwner = GetForegroundWindow(); - ofn.hInstance = 0; - ofn.lpstrFilter = lFilterPatterns && wcslen(lFilterPatterns) ? lFilterPatterns : NULL; - ofn.lpstrCustomFilter = NULL; - ofn.nMaxCustFilter = 0; - ofn.nFilterIndex = 1; - ofn.lpstrFile = lBuff; - ofn.nMaxFile = MAX_PATH_OR_CMD; - ofn.lpstrFileTitle = NULL; - ofn.nMaxFileTitle = MAX_PATH_OR_CMD / 2; - ofn.lpstrInitialDir = lDirname && wcslen(lDirname) ? lDirname : NULL; - ofn.lpstrTitle = aTitle && wcslen(aTitle) ? aTitle : NULL; - ofn.Flags = OFN_EXPLORER | OFN_NOCHANGEDIR | OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST; - ofn.nFileOffset = 0; - ofn.nFileExtension = 0; - ofn.lpstrDefExt = NULL; - ofn.lCustData = 0L; - ofn.lpfnHook = NULL; - ofn.lpTemplateName = NULL; - - if (aAllowMultipleSelects) - { - ofn.Flags |= OFN_ALLOWMULTISELECT; - } - - if (GetOpenFileNameW(&ofn) == 0) - { - lRetval = NULL; - } - else - { - lBuffLen = wcslen(lBuff); - lPointers[0] = lBuff + lBuffLen + 1; - if (!aAllowMultipleSelects || (lPointers[0][0] == L'\0')) - { - lRetval = lBuff; - } - else - { - i = 0; - do - { - lLengths[i] = wcslen(lPointers[i]); - lPointers[i + 1] = lPointers[i] + lLengths[i] + 1; - i++; - } while (lPointers[i][0] != L'\0'); - i--; - p = lBuff + MAX_MULTIPLE_FILES*MAX_PATH_OR_CMD - 1; - *p = L'\0'; - for (j = i; j >= 0; j--) - { - p -= lLengths[j]; - memmove(p, lPointers[j], lLengths[j]*sizeof(wchar_t)); - p--; - *p = L'\\'; - p -= lBuffLen; - memmove(p, lBuff, lBuffLen*sizeof(wchar_t)); - p--; - *p = L'|'; - } - p++; - lRetval = p; - } - } - - if (lHResult == S_OK || lHResult == S_FALSE) - { - CoUninitialize(); - } - return lRetval; -} - - -static char const * openFileDialogWinGui8( - char * const aoBuff, - char const * const aTitle, /* NULL or "" */ - char const * const aDefaultPathAndFile, /* NULL or "" */ - int const aNumOfFilterPatterns, /* 0 */ - char const * const * const aFilterPatterns, /* NULL or {"*.jpg","*.png"} */ - char const * const aSingleFilterDescription, /* NULL or "image files" */ - int const aAllowMultipleSelects) /* 0 or 1 */ -{ - wchar_t * lTitle; - wchar_t * lDefaultPathAndFile; - wchar_t * lSingleFilterDescription; - wchar_t * * lFilterPatterns; - wchar_t const * lTmpWChar; - char * lTmpChar; - int i; - - lFilterPatterns = (wchar_t * *) malloc(aNumOfFilterPatterns*sizeof(wchar_t *)); - for (i = 0; i < aNumOfFilterPatterns; i++) - { - lFilterPatterns[i] = utf8to16(aFilterPatterns[i]); - } - - lTitle = utf8to16(aTitle); - lDefaultPathAndFile = utf8to16(aDefaultPathAndFile); - lSingleFilterDescription = utf8to16(aSingleFilterDescription); - - lTmpWChar = tinyfd_openFileDialogW( - lTitle, - lDefaultPathAndFile, - aNumOfFilterPatterns, - (wchar_t const**) /*stupid cast for gcc*/ - lFilterPatterns, - lSingleFilterDescription, - aAllowMultipleSelects); - - free(lTitle); - free(lDefaultPathAndFile); - free(lSingleFilterDescription); - for (i = 0; i < aNumOfFilterPatterns; i++) - { - free(lFilterPatterns[i]); - } - free(lFilterPatterns); - - if (!lTmpWChar) - { - return NULL; - } - - lTmpChar = utf16to8(lTmpWChar); - strcpy(aoBuff, lTmpChar); - free(lTmpChar); - - return aoBuff; -} - -#ifndef TINYFD_NOSELECTFOLDERWIN -static int __stdcall BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lp, LPARAM pData) -{ - if (uMsg == BFFM_INITIALIZED) - { - SendMessage(hwnd, BFFM_SETSELECTION, TRUE, pData); - } - return 0; -} - -static int __stdcall BrowseCallbackProcW(HWND hwnd, UINT uMsg, LPARAM lp, LPARAM pData) -{ - if (uMsg == BFFM_INITIALIZED) - { - SendMessage(hwnd, BFFM_SETSELECTIONW, TRUE, (LPARAM)pData); - } - return 0; -} - -wchar_t const * tinyfd_selectFolderDialogW( - wchar_t const * const aTitle, /* NULL or "" */ - wchar_t const * const aDefaultPath) /* NULL or "" */ -{ - static wchar_t lBuff[MAX_PATH_OR_CMD]; - - BROWSEINFOW bInfo; - LPITEMIDLIST lpItem; - HRESULT lHResult; - - if (aTitle&&!wcscmp(aTitle, L"tinyfd_query")){ strcpy(tinyfd_response, "windows_wchar"); return (wchar_t const *)1; } - - lHResult = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED); - - bInfo.hwndOwner = GetForegroundWindow(); - bInfo.pidlRoot = NULL; - bInfo.pszDisplayName = lBuff; - bInfo.lpszTitle = aTitle && wcslen(aTitle) ? aTitle : NULL; - if (lHResult == S_OK || lHResult == S_FALSE) - { - bInfo.ulFlags = BIF_USENEWUI; - } - bInfo.lpfn = BrowseCallbackProcW; - bInfo.lParam = (LPARAM)aDefaultPath; - bInfo.iImage = -1; - - lpItem = SHBrowseForFolderW(&bInfo); - if (lpItem) - { - SHGetPathFromIDListW(lpItem, lBuff); - } - - if (lHResult == S_OK || lHResult == S_FALSE) - { - CoUninitialize(); - } - return lBuff; -} - - -static char const * selectFolderDialogWinGui8( - char * const aoBuff , - char const * const aTitle , /* NULL or "" */ - char const * const aDefaultPath ) /* NULL or "" */ -{ - wchar_t * lTitle; - wchar_t * lDefaultPath; - wchar_t const * lTmpWChar; - char * lTmpChar; - - lTitle = utf8to16(aTitle); - lDefaultPath = utf8to16(aDefaultPath); - - lTmpWChar = tinyfd_selectFolderDialogW( - lTitle, - lDefaultPath); - - free(lTitle); - free(lDefaultPath); - if (!lTmpWChar) - { - return NULL; - } - - lTmpChar = utf16to8(lTmpWChar); - strcpy(aoBuff, lTmpChar); - free(lTmpChar); - - return aoBuff; -} -#endif /*TINYFD_NOSELECTFOLDERWIN*/ - - -wchar_t const * tinyfd_colorChooserW( - wchar_t const * const aTitle, /* NULL or "" */ - wchar_t const * const aDefaultHexRGB, /* NULL or "#FF0000"*/ - unsigned char const aDefaultRGB[3], /* { 0 , 255 , 255 } */ - unsigned char aoResultRGB[3]) /* { 0 , 0 , 0 } */ -{ - static wchar_t lResultHexRGB[8]; - CHOOSECOLORW cc; - COLORREF crCustColors[16]; - unsigned char lDefaultRGB[3]; - int lRet; - - HRESULT lHResult; - - if (aTitle&&!wcscmp(aTitle, L"tinyfd_query")){ strcpy(tinyfd_response, "windows_wchar"); return (wchar_t const *)1; } - - lHResult = CoInitializeEx(NULL, 0); - - if (aDefaultHexRGB) - { - Hex2RGBW(aDefaultHexRGB, lDefaultRGB); - } - else - { - lDefaultRGB[0] = aDefaultRGB[0]; - lDefaultRGB[1] = aDefaultRGB[1]; - lDefaultRGB[2] = aDefaultRGB[2]; - } - - /* we can't use aTitle */ - cc.lStructSize = sizeof(CHOOSECOLOR); - cc.hwndOwner = GetForegroundWindow(); - cc.hInstance = NULL; - cc.rgbResult = RGB(lDefaultRGB[0], lDefaultRGB[1], lDefaultRGB[2]); - cc.lpCustColors = crCustColors; - cc.Flags = CC_RGBINIT | CC_FULLOPEN | CC_ANYCOLOR ; - cc.lCustData = 0; - cc.lpfnHook = NULL; - cc.lpTemplateName = NULL; - - lRet = ChooseColorW(&cc); - - if (!lRet) - { - return NULL; - } - - aoResultRGB[0] = GetRValue(cc.rgbResult); - aoResultRGB[1] = GetGValue(cc.rgbResult); - aoResultRGB[2] = GetBValue(cc.rgbResult); - - RGB2HexW(aoResultRGB, lResultHexRGB); - - if (lHResult == S_OK || lHResult == S_FALSE) - { - CoUninitialize(); - } - - return lResultHexRGB; -} - - -static char const * colorChooserWinGui8( - char const * const aTitle, /* NULL or "" */ - char const * const aDefaultHexRGB, /* NULL or "#FF0000"*/ - unsigned char const aDefaultRGB[3], /* { 0 , 255 , 255 } */ - unsigned char aoResultRGB[3]) /* { 0 , 0 , 0 } */ -{ - static char lResultHexRGB[8]; - - wchar_t * lTitle; - wchar_t * lDefaultHexRGB; - wchar_t const * lTmpWChar; - char * lTmpChar; - - lTitle = utf8to16(aTitle); - lDefaultHexRGB = utf8to16(aDefaultHexRGB); - - lTmpWChar = tinyfd_colorChooserW( - lTitle, - lDefaultHexRGB, - aDefaultRGB, - aoResultRGB ); - - free(lTitle); - free(lDefaultHexRGB); - if (!lTmpWChar) - { - return NULL; - } - - lTmpChar = utf16to8(lTmpWChar); - strcpy(lResultHexRGB, lTmpChar); - free(lTmpChar); - - return lResultHexRGB; -} - - -static int messageBoxWinGuiA( - char const * const aTitle , /* NULL or "" */ - char const * const aMessage , /* NULL or "" may contain \n and \t */ - char const * const aDialogType , /* "ok" "okcancel" "yesno" "yesnocancel" */ - char const * const aIconType , /* "info" "warning" "error" "question" */ - int const aDefaultButton ) /* 0 for cancel/no , 1 for ok/yes , 2 for no in yesnocancel */ -{ - int lBoxReturnValue; - UINT aCode ; - - if ( aIconType && ! strcmp( "warning" , aIconType ) ) - { - aCode = MB_ICONWARNING ; - } - else if ( aIconType && ! strcmp("error", aIconType)) - { - aCode = MB_ICONERROR ; - } - else if ( aIconType && ! strcmp("question", aIconType)) - { - aCode = MB_ICONQUESTION ; - } - else - { - aCode = MB_ICONINFORMATION ; - } - - if ( aDialogType && ! strcmp( "okcancel" , aDialogType ) ) - { - aCode += MB_OKCANCEL ; - if ( ! aDefaultButton ) - { - aCode += MB_DEFBUTTON2 ; - } - } - else if ( aDialogType && ! strcmp( "yesno" , aDialogType ) ) - { - aCode += MB_YESNO ; - if ( ! aDefaultButton ) - { - aCode += MB_DEFBUTTON2 ; - } - } - else if (aDialogType && !strcmp("yesnocancel", aDialogType)) - { - aCode += MB_YESNOCANCEL; - if (!aDefaultButton) - { - aCode += MB_DEFBUTTON3; - } - else if (aDefaultButton == 2) - { - aCode += MB_DEFBUTTON2; - } - } - else - { - aCode += MB_OK ; - } - - aCode += MB_TOPMOST; - - lBoxReturnValue = MessageBoxA(GetForegroundWindow(), aMessage, aTitle, aCode); - - if (((aDialogType && !strcmp("yesnocancel", aDialogType)) - && (lBoxReturnValue == IDNO))) - { - return 2; - } - - if ( ( ( aDialogType - && strcmp("yesnocancel", aDialogType) - && strcmp("okcancel", aDialogType) - && strcmp("yesno", aDialogType))) - || (lBoxReturnValue == IDOK) - || (lBoxReturnValue == IDYES) ) - { - return 1 ; - } - else - { - return 0 ; - } -} - - -static char const * saveFileDialogWinGuiA( - char * const aoBuff , - char const * const aTitle , /* NULL or "" */ - char const * const aDefaultPathAndFile , /* NULL or "" */ - int const aNumOfFilterPatterns , /* 0 */ - char const * const * const aFilterPatterns , /* NULL or {"*.jpg","*.png"} */ - char const * const aSingleFilterDescription ) /* NULL or "image files" */ -{ - char lDirname [MAX_PATH_OR_CMD] ; - char lDialogString[MAX_PATH_OR_CMD]; - char lFilterPatterns[MAX_PATH_OR_CMD] = ""; - int i ; - char * p; - char * lRetval; - HRESULT lHResult; - OPENFILENAMEA ofn = { 0 }; - - lHResult = CoInitializeEx(NULL,0); - - getPathWithoutFinalSlash(lDirname, aDefaultPathAndFile); - getLastName(aoBuff, aDefaultPathAndFile); - - if (aNumOfFilterPatterns > 0) - { - if ( aSingleFilterDescription && strlen(aSingleFilterDescription) ) - { - strcpy(lFilterPatterns, aSingleFilterDescription); - strcat(lFilterPatterns, "\n"); - } - strcat(lFilterPatterns, aFilterPatterns[0]); - for (i = 1; i < aNumOfFilterPatterns; i++) - { - strcat(lFilterPatterns, ";"); - strcat(lFilterPatterns, aFilterPatterns[i]); - } - strcat(lFilterPatterns, "\n"); - if ( ! (aSingleFilterDescription && strlen(aSingleFilterDescription) ) ) - { - strcpy(lDialogString, lFilterPatterns); - strcat(lFilterPatterns, lDialogString); - } - strcat(lFilterPatterns, "All Files\n*.*\n"); - p = lFilterPatterns; - while ((p = strchr(p, '\n')) != NULL) - { - *p = '\0'; - p ++ ; - } - } - - ofn.lStructSize = sizeof(OPENFILENAME) ; - ofn.hwndOwner = GetForegroundWindow(); - ofn.hInstance = 0 ; - ofn.lpstrFilter = lFilterPatterns && strlen(lFilterPatterns) ? lFilterPatterns : NULL; - ofn.lpstrCustomFilter = NULL ; - ofn.nMaxCustFilter = 0 ; - ofn.nFilterIndex = 1 ; - ofn.lpstrFile = aoBuff; - - ofn.nMaxFile = MAX_PATH_OR_CMD ; - ofn.lpstrFileTitle = NULL ; - ofn.nMaxFileTitle = MAX_PATH_OR_CMD / 2; - ofn.lpstrInitialDir = lDirname && strlen(lDirname) ? lDirname : NULL; - ofn.lpstrTitle = aTitle && strlen(aTitle) ? aTitle : NULL; - ofn.Flags = OFN_OVERWRITEPROMPT | OFN_NOCHANGEDIR ; - ofn.nFileOffset = 0 ; - ofn.nFileExtension = 0 ; - ofn.lpstrDefExt = NULL ; - ofn.lCustData = 0L ; - ofn.lpfnHook = NULL ; - ofn.lpTemplateName = NULL ; - - if ( GetSaveFileNameA ( & ofn ) == 0 ) - { - lRetval = NULL ; - } - else - { - lRetval = aoBuff ; - } - - if (lHResult==S_OK || lHResult==S_FALSE) - { - CoUninitialize(); - } - return lRetval ; -} - - -static char const * openFileDialogWinGuiA( - char * const aoBuff , - char const * const aTitle , /* NULL or "" */ - char const * const aDefaultPathAndFile , /* NULL or "" */ - int const aNumOfFilterPatterns , /* 0 */ - char const * const * const aFilterPatterns , /* NULL or {"*.jpg","*.png"} */ - char const * const aSingleFilterDescription , /* NULL or "image files" */ - int const aAllowMultipleSelects ) /* 0 or 1 */ -{ - char lDirname [MAX_PATH_OR_CMD] ; - char lFilterPatterns[MAX_PATH_OR_CMD] = ""; - char lDialogString[MAX_PATH_OR_CMD] ; - char * lPointers[MAX_MULTIPLE_FILES]; - size_t lLengths[MAX_MULTIPLE_FILES]; - int i , j ; - char * p; - size_t lBuffLen ; - char * lRetval; - HRESULT lHResult; - OPENFILENAMEA ofn = {0}; - - lHResult = CoInitializeEx(NULL,0); - - getPathWithoutFinalSlash(lDirname, aDefaultPathAndFile); - getLastName(aoBuff, aDefaultPathAndFile); - - if (aNumOfFilterPatterns > 0) - { - if ( aSingleFilterDescription && strlen(aSingleFilterDescription) ) - { - strcpy(lFilterPatterns, aSingleFilterDescription); - strcat(lFilterPatterns, "\n"); - } - strcat(lFilterPatterns, aFilterPatterns[0]); - for (i = 1; i < aNumOfFilterPatterns; i++) - { - strcat(lFilterPatterns, ";"); - strcat(lFilterPatterns, aFilterPatterns[i]); - } - strcat(lFilterPatterns, "\n"); - if ( ! (aSingleFilterDescription && strlen(aSingleFilterDescription) ) ) - { - strcpy(lDialogString, lFilterPatterns); - strcat(lFilterPatterns, lDialogString); - } - strcat(lFilterPatterns, "All Files\n*.*\n"); - p = lFilterPatterns; - while ((p = strchr(p, '\n')) != NULL) - { - *p = '\0'; - p ++ ; - } - } - - ofn.lStructSize = sizeof( OPENFILENAME ) ; - ofn.hwndOwner = GetForegroundWindow(); - ofn.hInstance = 0 ; - ofn.lpstrFilter = lFilterPatterns && strlen(lFilterPatterns) ? lFilterPatterns : NULL; - ofn.lpstrCustomFilter = NULL ; - ofn.nMaxCustFilter = 0 ; - ofn.nFilterIndex = 1 ; - ofn.lpstrFile = aoBuff ; - ofn.nMaxFile = MAX_PATH_OR_CMD ; - ofn.lpstrFileTitle = NULL ; - ofn.nMaxFileTitle = MAX_PATH_OR_CMD / 2; - ofn.lpstrInitialDir = lDirname && strlen(lDirname) ? lDirname : NULL; - ofn.lpstrTitle = aTitle && strlen(aTitle) ? aTitle : NULL; - ofn.Flags = OFN_EXPLORER | OFN_NOCHANGEDIR ; - ofn.nFileOffset = 0 ; - ofn.nFileExtension = 0 ; - ofn.lpstrDefExt = NULL ; - ofn.lCustData = 0L ; - ofn.lpfnHook = NULL ; - ofn.lpTemplateName = NULL ; - - if ( aAllowMultipleSelects ) - { - ofn.Flags |= OFN_ALLOWMULTISELECT; - } - - if ( GetOpenFileNameA( & ofn ) == 0 ) - { - lRetval = NULL ; - } - else - { - lBuffLen = strlen(aoBuff) ; - lPointers[0] = aoBuff + lBuffLen + 1 ; - if ( !aAllowMultipleSelects || (lPointers[0][0] == '\0') ) - { - lRetval = aoBuff ; - } - else - { - i = 0 ; - do - { - lLengths[i] = strlen(lPointers[i]); - lPointers[i+1] = lPointers[i] + lLengths[i] + 1 ; - i ++ ; - } - while ( lPointers[i][0] != '\0' ); - i--; - p = aoBuff + MAX_MULTIPLE_FILES*MAX_PATH_OR_CMD - 1 ; - * p = '\0'; - for ( j = i ; j >=0 ; j-- ) - { - p -= lLengths[j]; - memmove(p, lPointers[j], lLengths[j]); - p--; - *p = '\\'; - p -= lBuffLen ; - memmove(p, aoBuff, lBuffLen); - p--; - *p = '|'; - } - p++; - lRetval = p ; - } - } - - if (lHResult==S_OK || lHResult==S_FALSE) - { - CoUninitialize(); - } - return lRetval; -} - -#ifndef TINYFD_NOSELECTFOLDERWIN -static char const * selectFolderDialogWinGuiA( - char * const aoBuff , - char const * const aTitle , /* NULL or "" */ - char const * const aDefaultPath ) /* NULL or "" */ -{ - BROWSEINFOA bInfo ; - LPITEMIDLIST lpItem ; - HRESULT lHResult; - - lHResult = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED); - - /* we can't use aDefaultPath */ - bInfo.hwndOwner = GetForegroundWindow(); - bInfo.pidlRoot = NULL ; - bInfo.pszDisplayName = aoBuff ; - bInfo.lpszTitle = aTitle && strlen(aTitle) ? aTitle : NULL; - if (lHResult == S_OK || lHResult == S_FALSE) - { - bInfo.ulFlags = BIF_USENEWUI; - } - bInfo.lpfn = BrowseCallbackProc; - bInfo.lParam = (LPARAM)aDefaultPath; - bInfo.iImage = -1 ; - - lpItem = SHBrowseForFolderA( & bInfo ) ; - if ( lpItem ) - { - SHGetPathFromIDListA( lpItem , aoBuff ) ; - } - - if (lHResult==S_OK || lHResult==S_FALSE) - { - CoUninitialize(); - } - return aoBuff ; -} -#endif /*TINYFD_NOSELECTFOLDERWIN*/ - - -static char const * colorChooserWinGuiA( - char const * const aTitle, /* NULL or "" */ - char const * const aDefaultHexRGB, /* NULL or "#FF0000"*/ - unsigned char const aDefaultRGB[3], /* { 0 , 255 , 255 } */ - unsigned char aoResultRGB[3]) /* { 0 , 0 , 0 } */ -{ - static char lResultHexRGB[8]; - - CHOOSECOLORA cc; - COLORREF crCustColors[16]; - unsigned char lDefaultRGB[3]; - int lRet; - - if ( aDefaultHexRGB ) - { - Hex2RGB(aDefaultHexRGB, lDefaultRGB); - } - else - { - lDefaultRGB[0]=aDefaultRGB[0]; - lDefaultRGB[1]=aDefaultRGB[1]; - lDefaultRGB[2]=aDefaultRGB[2]; - } - - /* we can't use aTitle */ - cc.lStructSize = sizeof( CHOOSECOLOR ) ; - cc.hwndOwner = GetForegroundWindow(); - cc.hInstance = NULL ; - cc.rgbResult = RGB(lDefaultRGB[0], lDefaultRGB[1], lDefaultRGB[2]); - cc.lpCustColors = crCustColors; - cc.Flags = CC_RGBINIT | CC_FULLOPEN; - cc.lCustData = 0; - cc.lpfnHook = NULL; - cc.lpTemplateName = NULL; - - lRet = ChooseColorA(&cc); - - if ( ! lRet ) - { - return NULL; - } - - aoResultRGB[0] = GetRValue(cc.rgbResult); - aoResultRGB[1] = GetGValue(cc.rgbResult); - aoResultRGB[2] = GetBValue(cc.rgbResult); - - RGB2Hex(aoResultRGB, lResultHexRGB); - - return lResultHexRGB; -} - -#endif /* TINYFD_NOLIB */ - -static int dialogPresent( ) -{ - static int lDialogPresent = -1 ; - char lBuff [MAX_PATH_OR_CMD] ; - FILE * lIn ; - char const * lString = "dialog.exe"; - if ( lDialogPresent < 0 ) - { - if (!(lIn = _popen("where dialog.exe","r"))) - { - lDialogPresent = 0 ; - return 0 ; - } - while ( fgets( lBuff , sizeof( lBuff ) , lIn ) != NULL ) - {} - _pclose( lIn ) ; - if ( lBuff[strlen( lBuff ) -1] == '\n' ) - { - lBuff[strlen( lBuff ) -1] = '\0' ; - } - if ( strcmp(lBuff+strlen(lBuff)-strlen(lString),lString) ) - { - lDialogPresent = 0 ; - } - else - { - lDialogPresent = 1 ; - } - } - return lDialogPresent; -} - - -static int messageBoxWinConsole( - char const * const aTitle , /* NULL or "" */ - char const * const aMessage , /* NULL or "" may contain \n and \t */ - char const * const aDialogType , /* "ok" "okcancel" "yesno" "yesnocancel" */ - char const * const aIconType , /* "info" "warning" "error" "question" */ - int const aDefaultButton ) /* 0 for cancel/no , 1 for ok/yes , 2 for no in yesnocancel */ -{ - char lDialogString[MAX_PATH_OR_CMD]; - char lDialogFile[MAX_PATH_OR_CMD]; - FILE * lIn; - char lBuff [MAX_PATH_OR_CMD] = ""; - - strcpy( lDialogString , "dialog " ) ; - if ( aTitle && strlen(aTitle) ) - { - strcat(lDialogString, "--title \"") ; - strcat(lDialogString, aTitle) ; - strcat(lDialogString, "\" ") ; - } - - if ( aDialogType && ( !strcmp( "okcancel" , aDialogType ) - || !strcmp("yesno", aDialogType) || !strcmp("yesnocancel", aDialogType) ) ) - { - strcat(lDialogString, "--backtitle \"") ; - strcat(lDialogString, "tab: move focus") ; - strcat(lDialogString, "\" ") ; - } - - if ( aDialogType && ! strcmp( "okcancel" , aDialogType ) ) - { - if ( ! aDefaultButton ) - { - strcat( lDialogString , "--defaultno " ) ; - } - strcat( lDialogString , - "--yes-label \"Ok\" --no-label \"Cancel\" --yesno " ) ; - } - else if ( aDialogType && ! strcmp( "yesno" , aDialogType ) ) - { - if ( ! aDefaultButton ) - { - strcat( lDialogString , "--defaultno " ) ; - } - strcat( lDialogString , "--yesno " ) ; - } - else if (aDialogType && !strcmp("yesnocancel", aDialogType)) - { - if (!aDefaultButton) - { - strcat(lDialogString, "--defaultno "); - } - strcat(lDialogString, "--menu "); - } - else - { - strcat( lDialogString , "--msgbox " ) ; - } - - strcat( lDialogString , "\"" ) ; - if ( aMessage && strlen(aMessage) ) - { - replaceSubStr( aMessage , "\n" , "\\n" , lBuff ) ; - strcat(lDialogString, lBuff) ; - lBuff[0]='\0'; - } - strcat(lDialogString, "\" "); - - if (aDialogType && !strcmp("yesnocancel", aDialogType)) - { - strcat(lDialogString, "0 60 0 Yes \"\" No \"\""); - strcat(lDialogString, "2>>"); - } - else - { - strcat(lDialogString, "10 60"); - strcat(lDialogString, " && echo 1 > "); - } - - strcpy(lDialogFile, getenv("USERPROFILE")); - strcat(lDialogFile, "\\AppData\\Local\\Temp\\tinyfd.txt"); - strcat(lDialogString, lDialogFile); - - /*if (tinyfd_verbose) printf( "lDialogString: %s\n" , lDialogString ) ;*/ - system( lDialogString ) ; - - if (!(lIn = fopen(lDialogFile, "r"))) - { - remove(lDialogFile); - return 0 ; - } - while (fgets(lBuff, sizeof(lBuff), lIn) != NULL) - {} - fclose(lIn); - remove(lDialogFile); - if ( lBuff[strlen( lBuff ) -1] == '\n' ) - { - lBuff[strlen( lBuff ) -1] = '\0' ; - } - - /* if (tinyfd_verbose) printf("lBuff: %s\n", lBuff); */ - if ( ! strlen(lBuff) ) - { - return 0; - } - - if (aDialogType && !strcmp("yesnocancel", aDialogType)) - { - if (lBuff[0] == 'Y') return 1; - else return 2; - } - - return 1; -} - - -static char const * inputBoxWinConsole( - char * const aoBuff , - char const * const aTitle , /* NULL or "" */ - char const * const aMessage , /* NULL or "" may NOT contain \n nor \t */ - char const * const aDefaultInput ) /* "" , if NULL it's a passwordBox */ -{ - char lDialogString[MAX_PATH_OR_CMD]; - char lDialogFile[MAX_PATH_OR_CMD]; - FILE * lIn; - int lResult; - - strcpy(lDialogFile, getenv("USERPROFILE")); - strcat(lDialogFile, "\\AppData\\Local\\Temp\\tinyfd.txt"); - strcpy(lDialogString , "echo|set /p=1 >" ) ; - strcat(lDialogString, lDialogFile); - strcat( lDialogString , " & " ) ; - - strcat( lDialogString , "dialog " ) ; - if ( aTitle && strlen(aTitle) ) - { - strcat(lDialogString, "--title \"") ; - strcat(lDialogString, aTitle) ; - strcat(lDialogString, "\" ") ; - } - - strcat(lDialogString, "--backtitle \"") ; - strcat(lDialogString, "tab: move focus") ; - if ( ! aDefaultInput ) - { - strcat(lDialogString, " (sometimes nothing, no blink nor star, is shown in text field)") ; - } - - strcat(lDialogString, "\" ") ; - - if ( ! aDefaultInput ) - { - strcat( lDialogString , "--insecure --passwordbox" ) ; - } - else - { - strcat( lDialogString , "--inputbox" ) ; - } - strcat( lDialogString , " \"" ) ; - if ( aMessage && strlen(aMessage) ) - { - strcat(lDialogString, aMessage) ; - } - strcat(lDialogString,"\" 10 60 ") ; - if ( aDefaultInput && strlen(aDefaultInput) ) - { - strcat(lDialogString, "\"") ; - strcat(lDialogString, aDefaultInput) ; - strcat(lDialogString, "\" ") ; - } - - strcat(lDialogString, "2>>"); - strcpy(lDialogFile, getenv("USERPROFILE")); - strcat(lDialogFile, "\\AppData\\Local\\Temp\\tinyfd.txt"); - strcat(lDialogString, lDialogFile); - strcat(lDialogString, " || echo 0 > "); - strcat(lDialogString, lDialogFile); - - /* printf( "lDialogString: %s\n" , lDialogString ) ; */ - system( lDialogString ) ; - - if (!(lIn = fopen(lDialogFile, "r"))) - { - remove(lDialogFile); - return 0 ; - } - while (fgets(aoBuff, MAX_PATH_OR_CMD, lIn) != NULL) - {} - fclose(lIn); - - wipefile(lDialogFile); - remove(lDialogFile); - if ( aoBuff[strlen( aoBuff ) -1] == '\n' ) - { - aoBuff[strlen( aoBuff ) -1] = '\0' ; - } - /* printf( "aoBuff: %s\n" , aoBuff ) ; */ - - /* printf( "aoBuff: %s len: %lu \n" , aoBuff , strlen(aoBuff) ) ; */ - lResult = strncmp( aoBuff , "1" , 1) ? 0 : 1 ; - /* printf( "lResult: %d \n" , lResult ) ; */ - if ( ! lResult ) - { - return NULL ; - } - /* printf( "aoBuff+1: %s\n" , aoBuff+1 ) ; */ - return aoBuff+3 ; -} - - -static char const * saveFileDialogWinConsole( - char * const aoBuff , - char const * const aTitle , /* NULL or "" */ - char const * const aDefaultPathAndFile ) /* NULL or "" */ -{ - char lDialogString[MAX_PATH_OR_CMD]; - char lPathAndFile[MAX_PATH_OR_CMD] = ""; - FILE * lIn; - - strcpy( lDialogString , "dialog " ) ; - if ( aTitle && strlen(aTitle) ) - { - strcat(lDialogString, "--title \"") ; - strcat(lDialogString, aTitle) ; - strcat(lDialogString, "\" ") ; - } - - strcat(lDialogString, "--backtitle \"") ; - strcat(lDialogString, - "tab: focus | /: populate | spacebar: fill text field | ok: TEXT FIELD ONLY") ; - strcat(lDialogString, "\" ") ; - - strcat( lDialogString , "--fselect \"" ) ; - if ( aDefaultPathAndFile && strlen(aDefaultPathAndFile) ) - { - /* dialog.exe uses unix separators even on windows */ - strcpy(lPathAndFile, aDefaultPathAndFile); - replaceChr( lPathAndFile , '\\' , '/' ) ; - } - - /* dialog.exe needs at least one separator */ - if ( ! strchr(lPathAndFile, '/') ) - { - strcat(lDialogString, "./") ; - } - strcat(lDialogString, lPathAndFile) ; - strcat(lDialogString, "\" 0 60 2>"); - strcpy(lPathAndFile, getenv("USERPROFILE")); - strcat(lPathAndFile, "\\AppData\\Local\\Temp\\tinyfd.txt"); - strcat(lDialogString, lPathAndFile); - - /* printf( "lDialogString: %s\n" , lDialogString ) ; */ - system( lDialogString ) ; - - if (!(lIn = fopen(lPathAndFile, "r"))) - { - remove(lPathAndFile); - return NULL; - } - while (fgets(aoBuff, MAX_PATH_OR_CMD, lIn) != NULL) - {} - fclose(lIn); - remove(lPathAndFile); - replaceChr( aoBuff , '/' , '\\' ) ; - /* printf( "aoBuff: %s\n" , aoBuff ) ; */ - getLastName(lDialogString,aoBuff); - if ( ! strlen(lDialogString) ) - { - return NULL; - } - return aoBuff; -} - - -static char const * openFileDialogWinConsole( - char * const aoBuff , - char const * const aTitle , /* NULL or "" */ - char const * const aDefaultPathAndFile , /* NULL or "" */ - int const aAllowMultipleSelects ) /* 0 or 1 */ -{ - char lFilterPatterns[MAX_PATH_OR_CMD] = ""; - char lDialogString[MAX_PATH_OR_CMD] ; - FILE * lIn; - - strcpy( lDialogString , "dialog " ) ; - if ( aTitle && strlen(aTitle) ) - { - strcat(lDialogString, "--title \"") ; - strcat(lDialogString, aTitle) ; - strcat(lDialogString, "\" ") ; - } - - strcat(lDialogString, "--backtitle \"") ; - strcat(lDialogString, - "tab: focus | /: populate | spacebar: fill text field | ok: TEXT FIELD ONLY") ; - strcat(lDialogString, "\" ") ; - - strcat( lDialogString , "--fselect \"" ) ; - if ( aDefaultPathAndFile && strlen(aDefaultPathAndFile) ) - { - /* dialog.exe uses unix separators even on windows */ - strcpy(lFilterPatterns, aDefaultPathAndFile); - replaceChr( lFilterPatterns , '\\' , '/' ) ; - } - - /* dialog.exe needs at least one separator */ - if ( ! strchr(lFilterPatterns, '/') ) - { - strcat(lDialogString, "./") ; - } - strcat(lDialogString, lFilterPatterns) ; - strcat(lDialogString, "\" 0 60 2>"); - strcpy(lFilterPatterns, getenv("USERPROFILE")); - strcat(lFilterPatterns, "\\AppData\\Local\\Temp\\tinyfd.txt"); - strcat(lDialogString, lFilterPatterns); - - /* printf( "lDialogString: %s\n" , lDialogString ) ; */ - system( lDialogString ) ; - - if (!(lIn = fopen(lFilterPatterns, "r"))) - { - remove(lFilterPatterns); - return NULL; - } - while (fgets(aoBuff, MAX_PATH_OR_CMD, lIn) != NULL) - {} - fclose(lIn); - remove(lFilterPatterns); - replaceChr( aoBuff , '/' , '\\' ) ; - /* printf( "aoBuff: %s\n" , aoBuff ) ; */ - return aoBuff; -} - - -static char const * selectFolderDialogWinConsole( - char * const aoBuff , - char const * const aTitle , /* NULL or "" */ - char const * const aDefaultPath ) /* NULL or "" */ -{ - char lDialogString [MAX_PATH_OR_CMD] ; - char lString [MAX_PATH_OR_CMD] ; - FILE * lIn ; - - strcpy( lDialogString , "dialog " ) ; - if ( aTitle && strlen(aTitle) ) - { - strcat(lDialogString, "--title \"") ; - strcat(lDialogString, aTitle) ; - strcat(lDialogString, "\" ") ; - } - - strcat(lDialogString, "--backtitle \"") ; - strcat(lDialogString, - "tab: focus | /: populate | spacebar: fill text field | ok: TEXT FIELD ONLY") ; - strcat(lDialogString, "\" ") ; - - strcat( lDialogString , "--dselect \"" ) ; - if ( aDefaultPath && strlen(aDefaultPath) ) - { - /* dialog.exe uses unix separators even on windows */ - strcpy(lString, aDefaultPath) ; - ensureFinalSlash(lString); - replaceChr( lString , '\\' , '/' ) ; - strcat(lDialogString, lString) ; - } - else - { - /* dialog.exe needs at least one separator */ - strcat(lDialogString, "./") ; - } - strcat(lDialogString, "\" 0 60 2>"); - strcpy(lString, getenv("USERPROFILE")); - strcat(lString, "\\AppData\\Local\\Temp\\tinyfd.txt"); - strcat(lDialogString, lString); - - /* printf( "lDialogString: %s\n" , lDialogString ) ; */ - system( lDialogString ) ; - - if (!(lIn = fopen(lString, "r"))) - { - remove(lString); - return NULL; - } - while (fgets(aoBuff, MAX_PATH_OR_CMD, lIn) != NULL) - {} - fclose(lIn); - remove(lString); - replaceChr( aoBuff , '/' , '\\' ) ; - /* printf( "aoBuff: %s\n" , aoBuff ) ; */ - return aoBuff; -} - - -int tinyfd_messageBox( - char const * const aTitle , /* NULL or "" */ - char const * const aMessage , /* NULL or "" may contain \n and \t */ - char const * const aDialogType , /* "ok" "okcancel" "yesno" "yesnocancel" */ - char const * const aIconType , /* "info" "warning" "error" "question" */ - int const aDefaultButton ) /* 0 for cancel/no , 1 for ok/yes , 2 for no in yesnocancel */ -{ - char lChar ; - -#ifndef TINYFD_NOLIB - if ((!tinyfd_forceConsole || !(GetConsoleWindow() || dialogPresent())) - && (!getenv("SSH_CLIENT") || getenv("DISPLAY"))) - { - if (aTitle&&!strcmp(aTitle, "tinyfd_query")){ strcpy(tinyfd_response, "windows"); return 1; } - if (tinyfd_winUtf8) - { - return messageBoxWinGui8( - aTitle, aMessage, aDialogType, aIconType, aDefaultButton); - } - else - { - return messageBoxWinGuiA( - aTitle, aMessage, aDialogType, aIconType, aDefaultButton); - } - } - else -#endif /* TINYFD_NOLIB */ - if ( dialogPresent() ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"dialog");return 0;} - return messageBoxWinConsole( - aTitle,aMessage,aDialogType,aIconType,aDefaultButton); - } - else - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"basicinput");return 0;} - if (!gWarningDisplayed && !tinyfd_forceConsole ) - { - gWarningDisplayed = 1; - printf("\n\n%s\n", gTitle); - printf("%s\n\n", tinyfd_needs); - } - if ( aTitle && strlen(aTitle) ) - { - printf("\n%s\n\n", aTitle); - } - if ( aDialogType && !strcmp("yesno",aDialogType) ) - { - do - { - if ( aMessage && strlen(aMessage) ) - { - printf("%s\n",aMessage); - } - printf("y/n: "); - lChar = (char) tolower( _getch() ) ; - printf("\n\n"); - } - while ( lChar != 'y' && lChar != 'n' ) ; - return lChar == 'y' ? 1 : 0 ; - } - else if ( aDialogType && !strcmp("okcancel",aDialogType) ) - { - do - { - if ( aMessage && strlen(aMessage) ) - { - printf("%s\n",aMessage); - } - printf("[O]kay/[C]ancel: "); - lChar = (char) tolower( _getch() ) ; - printf("\n\n"); - } - while ( lChar != 'o' && lChar != 'c' ) ; - return lChar == 'o' ? 1 : 0 ; - } - else if (aDialogType && !strcmp("yesnocancel", aDialogType)) - { - do - { - if (aMessage && strlen(aMessage)) - { - printf("%s\n", aMessage); - } - printf("[Y]es/[N]o/[C]ancel: "); - lChar = (char)tolower(_getch()); - printf("\n\n"); - } while (lChar != 'y' && lChar != 'n' && lChar != 'c'); - return (lChar == 'y') ? 1 : (lChar == 'n') ? 2 : 0 ; - } - else - { - if ( aMessage && strlen(aMessage) ) - { - printf("%s\n\n",aMessage); - } - printf("press enter to continue "); - lChar = (char) _getch() ; - printf("\n\n"); - return 1 ; - } - } -} - - -/* return has only meaning for tinyfd_query */ -int tinyfd_notifyPopup( - char const * const aTitle , /* NULL or "" */ - char const * const aMessage , /* NULL or "" may contain \n \t */ - char const * const aIconType ) /* "info" "warning" "error" */ -{ -#ifndef TINYFD_NOLIB - if ((!tinyfd_forceConsole || !( - GetConsoleWindow() || - dialogPresent())) - && ( !getenv("SSH_CLIENT") || getenv("DISPLAY") ) ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"windows");return 1;} - return notifyWinGui(aTitle, aMessage, aIconType); - } - else -#endif /* TINYFD_NOLIB */ - { - return tinyfd_messageBox(aTitle, aMessage, "ok" , aIconType, 0); - } -} - - -/* returns NULL on cancel */ -char const * tinyfd_inputBox( - char const * const aTitle , /* NULL or "" */ - char const * const aMessage , /* NULL or "" may NOT contain \n nor \t */ - char const * const aDefaultInput ) /* "" , if NULL it's a passwordBox */ -{ - static char lBuff [MAX_PATH_OR_CMD] ; - char * lEOF; - -#ifndef TINYFD_NOLIB - DWORD mode = 0; - HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE); - - if ((!tinyfd_forceConsole || !( - GetConsoleWindow() || - dialogPresent())) - && ( !getenv("SSH_CLIENT") || getenv("DISPLAY") ) ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"windows");return (char const *)1;} - lBuff[0]='\0'; - return inputBoxWinGui(lBuff, aTitle, aMessage, aDefaultInput); - } - else -#endif /* TINYFD_NOLIB */ - if ( dialogPresent() ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"dialog");return (char const *)0;} - lBuff[0]='\0'; - return inputBoxWinConsole(lBuff,aTitle,aMessage,aDefaultInput); - } - else - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"basicinput");return (char const *)0;} - lBuff[0]='\0'; - if (!gWarningDisplayed && !tinyfd_forceConsole) - { - gWarningDisplayed = 1 ; - printf("\n\n%s\n", gTitle); - printf("%s\n\n", tinyfd_needs); - } - if ( aTitle && strlen(aTitle) ) - { - printf("\n%s\n\n", aTitle); - } - if ( aMessage && strlen(aMessage) ) - { - printf("%s\n",aMessage); - } - printf("(ctrl-Z + enter to cancel): "); -#ifndef TINYFD_NOLIB - if ( ! aDefaultInput ) - { - GetConsoleMode(hStdin,&mode); - SetConsoleMode(hStdin,mode & (~ENABLE_ECHO_INPUT) ); - } -#endif /* TINYFD_NOLIB */ - lEOF = fgets(lBuff, MAX_PATH_OR_CMD, stdin); - if ( ! lEOF ) - { - return NULL; - } -#ifndef TINYFD_NOLIB - if ( ! aDefaultInput ) - { - SetConsoleMode(hStdin,mode); - printf("\n"); - } -#endif /* TINYFD_NOLIB */ - printf("\n"); - if ( strchr(lBuff,27) ) - { - return NULL ; - } - if ( lBuff[strlen( lBuff ) -1] == '\n' ) - { - lBuff[strlen( lBuff ) -1] = '\0' ; - } - return lBuff ; - } -} - - -char const * tinyfd_saveFileDialog( - char const * const aTitle , /* NULL or "" */ - char const * const aDefaultPathAndFile , /* NULL or "" */ - int const aNumOfFilterPatterns , /* 0 */ - char const * const * const aFilterPatterns , /* NULL or {"*.jpg","*.png"} */ - char const * const aSingleFilterDescription ) /* NULL or "image files" */ -{ - static char lBuff [MAX_PATH_OR_CMD] ; - char lString[MAX_PATH_OR_CMD] ; - char const * p ; - lBuff[0]='\0'; -#ifndef TINYFD_NOLIB - if ( ( !tinyfd_forceConsole || !( GetConsoleWindow() || dialogPresent() ) ) - && ( !getenv("SSH_CLIENT") || getenv("DISPLAY") ) ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"windows");return (char const *)1;} - if (tinyfd_winUtf8) - { - p = saveFileDialogWinGui8(lBuff, - aTitle, aDefaultPathAndFile, aNumOfFilterPatterns, aFilterPatterns, aSingleFilterDescription); - } - else - { - p = saveFileDialogWinGuiA(lBuff, - aTitle, aDefaultPathAndFile, aNumOfFilterPatterns, aFilterPatterns, aSingleFilterDescription); - } - } - else -#endif /* TINYFD_NOLIB */ - if ( dialogPresent() ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"dialog");return (char const *)0;} - p = saveFileDialogWinConsole(lBuff,aTitle,aDefaultPathAndFile); - } - else - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"basicinput");return (char const *)0;} - p = tinyfd_inputBox(aTitle, "Save file",""); - } - - if ( ! p || ! strlen( p ) ) - { - return NULL; - } - getPathWithoutFinalSlash( lString , p ) ; - if ( strlen( lString ) && ! dirExists( lString ) ) - { - return NULL ; - } - getLastName(lString,p); - if ( ! filenameValid(lString) ) - { - return NULL; - } - return p ; -} - - -/* in case of multiple files, the separator is | */ -char const * tinyfd_openFileDialog( - char const * const aTitle , /* NULL or "" */ - char const * const aDefaultPathAndFile , /* NULL or "" */ - int const aNumOfFilterPatterns , /* 0 */ - char const * const * const aFilterPatterns , /* NULL or {"*.jpg","*.png"} */ - char const * const aSingleFilterDescription , /* NULL or "image files" */ - int const aAllowMultipleSelects ) /* 0 or 1 */ -{ - static char lBuff[MAX_MULTIPLE_FILES*MAX_PATH_OR_CMD]; - char const * p ; -#ifndef TINYFD_NOLIB - if ( ( !tinyfd_forceConsole || !( GetConsoleWindow() || dialogPresent() ) ) - && ( !getenv("SSH_CLIENT") || getenv("DISPLAY") ) ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"windows");return (char const *)1;} - if (tinyfd_winUtf8) - { - p = openFileDialogWinGui8(lBuff, - aTitle, aDefaultPathAndFile, aNumOfFilterPatterns, - aFilterPatterns, aSingleFilterDescription, aAllowMultipleSelects); - } - else - { - p = openFileDialogWinGuiA(lBuff, - aTitle, aDefaultPathAndFile, aNumOfFilterPatterns, - aFilterPatterns, aSingleFilterDescription, aAllowMultipleSelects); - } - } - else -#endif /* TINYFD_NOLIB */ - if ( dialogPresent() ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"dialog");return (char const *)0;} - p = openFileDialogWinConsole(lBuff, - aTitle,aDefaultPathAndFile,aAllowMultipleSelects); - } - else - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"basicinput");return (char const *)0;} - p = tinyfd_inputBox(aTitle, "Open file",""); - } - - if ( ! p || ! strlen( p ) ) - { - return NULL; - } - if ( aAllowMultipleSelects && strchr(p, '|') ) - { - p = ensureFilesExist( lBuff , p ) ; - } - else if ( ! fileExists(p) ) - { - return NULL ; - } - /* printf( "lBuff3: %s\n" , p ) ; */ - return p ; -} - - -char const * tinyfd_selectFolderDialog( - char const * const aTitle , /* NULL or "" */ - char const * const aDefaultPath ) /* NULL or "" */ -{ - static char lBuff [MAX_PATH_OR_CMD] ; - char const * p ; -#ifndef TINYFD_NOLIB - if ( ( !tinyfd_forceConsole || !( GetConsoleWindow() || dialogPresent() ) ) - && ( !getenv("SSH_CLIENT") || getenv("DISPLAY") ) ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"windows");return (char const *)1;} - if (tinyfd_winUtf8) - { -#ifndef TINYFD_NOSELECTFOLDERWIN - p = selectFolderDialogWinGui8(lBuff, aTitle, aDefaultPath); - } - else - { - p = selectFolderDialogWinGuiA(lBuff, aTitle, aDefaultPath); -#endif /*TINYFD_NOSELECTFOLDERWIN*/ - } - } - else -#endif /* TINYFD_NOLIB */ - if ( dialogPresent() ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"dialog");return (char const *)0;} - p = selectFolderDialogWinConsole(lBuff,aTitle,aDefaultPath); - } - else - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"basicinput");return (char const *)0;} - p = tinyfd_inputBox(aTitle, "Select folder",""); - } - - if ( ! p || ! strlen( p ) || ! dirExists( p ) ) - { - return NULL ; - } - return p ; -} - - -/* returns the hexcolor as a string "#FF0000" */ -/* aoResultRGB also contains the result */ -/* aDefaultRGB is used only if aDefaultHexRGB is NULL */ -/* aDefaultRGB and aoResultRGB can be the same array */ -char const * tinyfd_colorChooser( - char const * const aTitle, /* NULL or "" */ - char const * const aDefaultHexRGB, /* NULL or "#FF0000"*/ - unsigned char const aDefaultRGB[3], /* { 0 , 255 , 255 } */ - unsigned char aoResultRGB[3]) /* { 0 , 0 , 0 } */ -{ - char lDefaultHexRGB[8]; - char * lpDefaultHexRGB; - int i; - char const * p ; - -#ifndef TINYFD_NOLIB - if ( (!tinyfd_forceConsole || !( GetConsoleWindow() || dialogPresent()) ) - && (!getenv("SSH_CLIENT") || getenv("DISPLAY")) ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"windows");return (char const *)1;} - if (tinyfd_winUtf8) - { - return colorChooserWinGui8( - aTitle, aDefaultHexRGB, aDefaultRGB, aoResultRGB); - } - else - { - return colorChooserWinGuiA( - aTitle, aDefaultHexRGB, aDefaultRGB, aoResultRGB); - } - } - else -#endif /* TINYFD_NOLIB */ - if ( aDefaultHexRGB ) - { - lpDefaultHexRGB = (char *) aDefaultHexRGB ; - } - else - { - RGB2Hex( aDefaultRGB , lDefaultHexRGB ) ; - lpDefaultHexRGB = (char *) lDefaultHexRGB ; - } - p = tinyfd_inputBox(aTitle, - "Enter hex rgb color (i.e. #f5ca20)",lpDefaultHexRGB); - if (aTitle&&!strcmp(aTitle,"tinyfd_query")) return p; - - if ( !p || (strlen(p) != 7) || (p[0] != '#') ) - { - return NULL ; - } - for ( i = 1 ; i < 7 ; i ++ ) - { - if ( ! isxdigit( p[i] ) ) - { - return NULL ; - } - } - Hex2RGB(p,aoResultRGB); - return p ; -} - - -#else /* unix */ - -static char gPython2Name[16]; -static char gPython3Name[16]; -static char gPythonName[16]; - -static int isDarwin( ) -{ - static int lsIsDarwin = -1 ; - struct utsname lUtsname ; - if ( lsIsDarwin < 0 ) - { - lsIsDarwin = !uname(&lUtsname) && !strcmp(lUtsname.sysname,"Darwin") ; - } - return lsIsDarwin ; -} - - -static int dirExists( char const * const aDirPath ) -{ - DIR * lDir ; - if ( ! aDirPath || ! strlen( aDirPath ) ) - return 0 ; - lDir = opendir( aDirPath ) ; - if ( ! lDir ) - { - return 0 ; - } - closedir( lDir ) ; - return 1 ; -} - - -static int detectPresence( char const * const aExecutable ) -{ - char lBuff [MAX_PATH_OR_CMD] ; - char lTestedString [MAX_PATH_OR_CMD] = "which " ; - FILE * lIn ; - - strcat( lTestedString , aExecutable ) ; - strcat( lTestedString, " 2>/dev/null "); - lIn = popen( lTestedString , "r" ) ; - if ( ( fgets( lBuff , sizeof( lBuff ) , lIn ) != NULL ) - && ( ! strchr( lBuff , ':' ) ) - && ( strncmp(lBuff, "no ", 3) ) ) - { /* present */ - pclose( lIn ) ; - if (tinyfd_verbose) printf("detectPresence %s %d\n", aExecutable, 1); - return 1 ; - } - else - { - pclose( lIn ) ; - if (tinyfd_verbose) printf("detectPresence %s %d\n", aExecutable, 0); - return 0 ; - } -} - - -static char const * getVersion( char const * const aExecutable ) /*version # must follow :*/ -{ - static char lBuff [MAX_PATH_OR_CMD] ; - char lTestedString [MAX_PATH_OR_CMD] ; - FILE * lIn ; - char * lTmp ; - - strcpy( lTestedString , aExecutable ) ; - strcat( lTestedString , " --version" ) ; - - lIn = popen( lTestedString , "r" ) ; - lTmp = fgets( lBuff , sizeof( lBuff ) , lIn ) ; - pclose( lIn ) ; - if ( ! lTmp || !(lTmp = strchr( lBuff , ':' )) ) return 0 ; - lTmp ++ ; - /* printf("lTmp %s\n", lTmp); */ - return lTmp ; -} - - -static int tryCommand( char const * const aCommand ) -{ - char lBuff [MAX_PATH_OR_CMD] ; - FILE * lIn ; - - lIn = popen( aCommand , "r" ) ; - if ( fgets( lBuff , sizeof( lBuff ) , lIn ) == NULL ) - { /* present */ - pclose( lIn ) ; - return 1 ; - } - else - { - pclose( lIn ) ; - return 0 ; - } - -} - - -static int isTerminalRunning() -{ - return isatty(1); -} - - -static char const * dialogNameOnly( ) -{ - static char lDialogName[128] = "*" ; - if ( lDialogName[0] == '*' ) - { - if ( isDarwin() && strcpy(lDialogName , "/opt/local/bin/dialog" ) - && detectPresence( lDialogName ) ) - {} - else if ( strcpy(lDialogName , "dialog" ) - && detectPresence( lDialogName ) ) - {} - else - { - strcpy(lDialogName , "" ) ; - } - } - return lDialogName ; -} - - -int isDialogVersionBetter09b( ) -{ - char const * lDialogName ; - char * lVersion ; - int lMajor ; - int lMinor ; - int lDate ; - int lResult ; - char * lMinorP ; - char * lLetter ; - char lBuff[128] ; - - /*char lTest[128] = " 0.9b-20031126" ;*/ - - lDialogName = dialogNameOnly() ; - if ( ! strlen(lDialogName) || !(lVersion = (char *) getVersion(lDialogName)) ) return 0 ; - /*lVersion = lTest ;*/ - /*printf("lVersion %s\n", lVersion);*/ - strcpy(lBuff,lVersion); - lMajor = atoi( strtok(lVersion," ,.-") ) ; - /*printf("lMajor %d\n", lMajor);*/ - lMinorP = strtok(0," ,.-abcdefghijklmnopqrstuvxyz"); - lMinor = atoi( lMinorP ) ; - /*printf("lMinor %d\n", lMinor );*/ - lDate = atoi( strtok(0," ,.-") ) ; - if (lDate<0) lDate = - lDate; - /*printf("lDate %d\n", lDate);*/ - lLetter = lMinorP + strlen(lMinorP) ; - strcpy(lVersion,lBuff); - strtok(lLetter," ,.-"); - /*printf("lLetter %s\n", lLetter);*/ - lResult = (lMajor > 0) || ( ( lMinor == 9 ) && (*lLetter == 'b') && (lDate >= 20031126) ); - /*printf("lResult %d\n", lResult);*/ - return lResult; -} - - -static int whiptailPresentOnly( ) -{ - static int lWhiptailPresent = -1 ; - if ( lWhiptailPresent < 0 ) - { - lWhiptailPresent = detectPresence( "whiptail" ) ; - } - return lWhiptailPresent ; -} - - -static char const * terminalName( ) -{ - static char lTerminalName[128] = "*" ; - char lShellName[64] = "*" ; - - if ( lTerminalName[0] == '*' ) - { - if ( detectPresence( "bash" ) ) - { - strcpy(lShellName , "bash -c " ) ; /*good for basic input*/ - } - else if ( strlen(dialogNameOnly()) || whiptailPresentOnly() ) - { - strcpy(lShellName , "sh -c " ) ; /*good enough for dialog & whiptail*/ - } - else - { - return NULL ; - } - - if ( isDarwin() ) - { - if ( strcpy(lTerminalName , "/opt/X11/bin/xterm" ) - && detectPresence( lTerminalName ) ) - { - strcat(lTerminalName , " -fa 'DejaVu Sans Mono' -fs 10 -title tinyfiledialogs -e " ) ; - strcat(lTerminalName , lShellName ) ; - } - else - { - strcpy(lTerminalName , "" ) ; - } - } - else if ( strcpy(lTerminalName,"xterm") /*good (small without parameters)*/ - && detectPresence(lTerminalName) ) - { - strcat(lTerminalName , " -fa 'DejaVu Sans Mono' -fs 10 -title tinyfiledialogs -e " ) ; - strcat(lTerminalName , lShellName ) ; - } - else if ( strcpy(lTerminalName,"terminator") /*good*/ - && detectPresence(lTerminalName) ) - { - strcat(lTerminalName , " -x " ) ; - strcat(lTerminalName , lShellName ) ; - } - else if ( strcpy(lTerminalName,"lxterminal") /*good*/ - && detectPresence(lTerminalName) ) - { - strcat(lTerminalName , " -e " ) ; - strcat(lTerminalName , lShellName ) ; - } - else if ( strcpy(lTerminalName,"konsole") /*good*/ - && detectPresence(lTerminalName) ) - { - strcat(lTerminalName , " -e " ) ; - strcat(lTerminalName , lShellName ) ; - } - else if ( strcpy(lTerminalName,"kterm") /*good*/ - && detectPresence(lTerminalName) ) - { - strcat(lTerminalName , " -e " ) ; - strcat(lTerminalName , lShellName ) ; - } - else if ( strcpy(lTerminalName,"xfce4-terminal") /*good*/ - && detectPresence(lTerminalName) ) - { - strcat(lTerminalName , " -x " ) ; - strcat(lTerminalName , lShellName ) ; - } - else if ( strcpy(lTerminalName,"mate-terminal") /*good*/ - && detectPresence(lTerminalName) ) - { - strcat(lTerminalName , " -x " ) ; - strcat(lTerminalName , lShellName ) ; - } - else if ( strcpy(lTerminalName,"Eterm") /*good*/ - && detectPresence(lTerminalName) ) - { - strcat(lTerminalName , " -e " ) ; - strcat(lTerminalName , lShellName ) ; - } - else if ( strcpy(lTerminalName,"evilvte") /*good*/ - && detectPresence(lTerminalName) ) - { - strcat(lTerminalName , " -e " ) ; - strcat(lTerminalName , lShellName ) ; - } - else if ( strcpy(lTerminalName,"pterm") /*good (only letters)*/ - && detectPresence(lTerminalName) ) - { - strcat(lTerminalName , " -e " ) ; - strcat(lTerminalName , lShellName ) ; - } - else if ( strcpy(lTerminalName,"gnome-terminal") /*bad (good if version < 3)*/ - && detectPresence(lTerminalName) ) - { - strcat(lTerminalName , " --disable-factory -x " ) ; - strcat(lTerminalName , lShellName ) ; - } - else - { - strcpy(lTerminalName , "" ) ; - } - /* bad: koi rxterm guake tilda vala-terminal qterminal - aterm Terminal terminology sakura lilyterm weston-terminal - roxterm termit xvt rxvt mrxvt urxvt */ - } - if ( strlen(lTerminalName) ) - { - return lTerminalName ; - } - else - { - return NULL ; - } -} - - -static char const * dialogName( ) -{ - char const * lDialogName ; - lDialogName = dialogNameOnly( ) ; - if ( strlen(lDialogName) && ( isTerminalRunning() || terminalName() ) ) - { - return lDialogName ; - } - else - { - return NULL ; - } -} - - -static int whiptailPresent( ) -{ - int lWhiptailPresent ; - lWhiptailPresent = whiptailPresentOnly( ) ; - if ( lWhiptailPresent && ( isTerminalRunning() || terminalName() ) ) - { - return lWhiptailPresent ; - } - else - { - return 0 ; - } -} - - - -static int graphicMode() -{ - return !( tinyfd_forceConsole && (isTerminalRunning() || terminalName()) ) - && ( getenv("DISPLAY") - || (isDarwin() && (!getenv("SSH_TTY") || getenv("DISPLAY") ) ) ) ; -} - - -static int pactlPresent( ) -{ - static int lPactlPresent = -1 ; - if ( lPactlPresent < 0 ) - { - lPactlPresent = detectPresence("pactl") ; - } - return lPactlPresent ; -} - - -static int speakertestPresent( ) -{ - static int lSpeakertestPresent = -1 ; - if ( lSpeakertestPresent < 0 ) - { - lSpeakertestPresent = detectPresence("speaker-test") ; - } - return lSpeakertestPresent ; -} - - -static int beepexePresent( ) -{ - static int lBeepexePresent = -1 ; - if ( lBeepexePresent < 0 ) - { - lBeepexePresent = detectPresence("beep.exe") ; - } - return lBeepexePresent ; -} - - -static int xmessagePresent( ) -{ - static int lXmessagePresent = -1 ; - if ( lXmessagePresent < 0 ) - { - lXmessagePresent = detectPresence("xmessage");/*if not tty,not on osxpath*/ - } - return lXmessagePresent && graphicMode( ) ; -} - - -static int gxmessagePresent( ) -{ - static int lGxmessagePresent = -1 ; - if ( lGxmessagePresent < 0 ) - { - lGxmessagePresent = detectPresence("gxmessage") ; - } - return lGxmessagePresent && graphicMode( ) ; -} - - -static int gmessagePresent( ) -{ - static int lGmessagePresent = -1 ; - if ( lGmessagePresent < 0 ) - { - lGmessagePresent = detectPresence("gmessage") ; - } - return lGmessagePresent && graphicMode( ) ; -} - - -static int notifysendPresent( ) -{ - static int lNotifysendPresent = -1 ; - if ( lNotifysendPresent < 0 ) - { - lNotifysendPresent = detectPresence("notify-send") ; - } - return lNotifysendPresent && graphicMode( ) ; -} - - -static int perlPresent( ) -{ - static int lPerlPresent = -1 ; - char lBuff [MAX_PATH_OR_CMD] ; - FILE * lIn ; - - if ( lPerlPresent < 0 ) - { - lPerlPresent = detectPresence("perl") ; - if ( lPerlPresent ) - { - lIn = popen( "perl -MNet::DBus -e \"Net::DBus->session->get_service('org.freedesktop.Notifications')\" 2>&1" , "r" ) ; - if ( fgets( lBuff , sizeof( lBuff ) , lIn ) == NULL ) - { - lPerlPresent = 2 ; - } - pclose( lIn ) ; - if (tinyfd_verbose) printf("perl-dbus %d\n", lPerlPresent); - } - } - return graphicMode() ? lPerlPresent : 0 ; -} - - -static int afplayPresent( ) -{ - static int lAfplayPresent = -1 ; - char lBuff [MAX_PATH_OR_CMD] ; - FILE * lIn ; - - if ( lAfplayPresent < 0 ) - { - lAfplayPresent = detectPresence("afplay") ; - if ( lAfplayPresent ) - { - lIn = popen( "test -e /System/Library/Sounds/Ping.aiff || echo Ping" , "r" ) ; - if ( fgets( lBuff , sizeof( lBuff ) , lIn ) == NULL ) - { - lAfplayPresent = 2 ; - } - pclose( lIn ) ; - if (tinyfd_verbose) printf("afplay %d\n", lAfplayPresent); - } - } - return graphicMode() ? lAfplayPresent : 0 ; -} - - -static int xdialogPresent( ) -{ - static int lXdialogPresent = -1 ; - if ( lXdialogPresent < 0 ) - { - lXdialogPresent = detectPresence("Xdialog") ; - } - return lXdialogPresent && graphicMode( ) ; -} - - -static int gdialogPresent( ) -{ - static int lGdialoglPresent = -1 ; - if ( lGdialoglPresent < 0 ) - { - lGdialoglPresent = detectPresence( "gdialog" ) ; - } - return lGdialoglPresent && graphicMode( ) ; -} - - -static int osascriptPresent( ) -{ - static int lOsascriptPresent = -1 ; - if ( lOsascriptPresent < 0 ) - { - gWarningDisplayed |= !!getenv("SSH_TTY"); - lOsascriptPresent = detectPresence( "osascript" ) ; - } - return lOsascriptPresent && graphicMode() && !getenv("SSH_TTY") ; -} - - -static int kdialogPresent( ) -{ - static int lKdialogPresent = -1 ; - char lBuff [MAX_PATH_OR_CMD] ; - FILE * lIn ; - - if ( lKdialogPresent < 0 ) - { - lKdialogPresent = detectPresence("kdialog") ; - if ( lKdialogPresent && !getenv("SSH_TTY") ) - { - lIn = popen( "kdialog --attach 2>&1" , "r" ) ; - if ( fgets( lBuff , sizeof( lBuff ) , lIn ) != NULL ) - { - if ( ! strstr( "Unknown" , lBuff ) ) - { - lKdialogPresent = 2 ; - if (tinyfd_verbose) printf("kdialog-attach %d\n", lKdialogPresent); - } - } - pclose( lIn ) ; - - if (lKdialogPresent == 2) - { - lKdialogPresent = 1 ; - lIn = popen( "kdialog --passivepopup 2>&1" , "r" ) ; - if ( fgets( lBuff , sizeof( lBuff ) , lIn ) != NULL ) - { - if ( ! strstr( "Unknown" , lBuff ) ) - { - lKdialogPresent = 2 ; - if (tinyfd_verbose) printf("kdialog-popup %d\n", lKdialogPresent); - } - } - pclose( lIn ) ; - } - } - } - return graphicMode() ? lKdialogPresent : 0 ; -} - - -static int qarmaPresent( ) -{ - static int lQarmaPresent = -1 ; - if ( lQarmaPresent < 0 ) - { - lQarmaPresent = detectPresence("qarma") ; - } - return lQarmaPresent && graphicMode( ) ; -} - - -static int matedialogPresent( ) -{ - static int lMatedialogPresent = -1 ; - if ( lMatedialogPresent < 0 ) - { - lMatedialogPresent = detectPresence("matedialog") ; - } - return lMatedialogPresent && graphicMode( ) ; -} - - -static int shellementaryPresent( ) -{ - static int lShellementaryPresent = -1 ; - if ( lShellementaryPresent < 0 ) - { - lShellementaryPresent = 0 ; /*detectPresence("shellementary"); shellementary is not ready yet */ - } - return lShellementaryPresent && graphicMode( ) ; -} - - -static int zenityPresent( ) -{ - static int lZenityPresent = -1 ; - if ( lZenityPresent < 0 ) - { - lZenityPresent = detectPresence("zenity") ; - } - return lZenityPresent && graphicMode( ) ; -} - - -static int zenity3Present() -{ - static int lZenity3Present = -1 ; - char lBuff [MAX_PATH_OR_CMD] ; - FILE * lIn ; - - if ( lZenity3Present < 0 ) - { - lZenity3Present = 0 ; - if ( zenityPresent() ) - { - lIn = popen( "zenity --version" , "r" ) ; - if ( fgets( lBuff , sizeof( lBuff ) , lIn ) != NULL ) - { - if ( atoi(lBuff) >= 3 ) - { - lZenity3Present = 3 ; - if ( atoi(strtok(lBuff,".")+2 ) >= 10 ) - { - lZenity3Present = 4 ; - } - } - else if ( ( atoi(lBuff) == 2 ) && ( atoi(strtok(lBuff,".")+2 ) >= 32 ) ) - { - lZenity3Present = 2 ; - } - if (tinyfd_verbose) printf("zenity %d\n", lZenity3Present); - } - pclose( lIn ) ; - } - } - return graphicMode() ? lZenity3Present : 0 ; -} - - -static int osx9orBetter( ) -{ - static int lOsx9orBetter = -1 ; - char lBuff [MAX_PATH_OR_CMD] ; - FILE * lIn ; - int V,v; - - if ( lOsx9orBetter < 0 ) - { - lOsx9orBetter = 0 ; - lIn = popen( "osascript -e 'set osver to system version of (system info)'" , "r" ) ; - if ( ( fgets( lBuff , sizeof( lBuff ) , lIn ) != NULL ) - && ( 2 == sscanf(lBuff, "%d.%d", &V, &v) ) ) - { - V = V * 100 + v; - if ( V >= 1009 ) - { - lOsx9orBetter = 1 ; - } - } - pclose( lIn ) ; - if (tinyfd_verbose) printf("Osx10 = %d, %d = %s\n", lOsx9orBetter, V, lBuff) ; - } - return lOsx9orBetter ; -} - - -static int python2Present( ) -{ - static int lPython2Present = -1 ; - int i; - - if ( lPython2Present < 0 ) - { - lPython2Present = 0 ; - strcpy(gPython2Name , "python2" ) ; - if ( detectPresence(gPython2Name) ) lPython2Present = 1; - else - { - for ( i = 9 ; i >= 0 ; i -- ) - { - sprintf( gPython2Name , "python2.%d" , i ) ; - if ( detectPresence(gPython2Name) ) - { - lPython2Present = 1; - break; - } - } - /*if ( ! lPython2Present ) - { - strcpy(gPython2Name , "python" ) ; - if ( detectPresence(gPython2Name) ) lPython2Present = 1; - }*/ - } - if (tinyfd_verbose) printf("lPython2Present %d\n", lPython2Present) ; - if (tinyfd_verbose) printf("gPython2Name %s\n", gPython2Name) ; - } - return lPython2Present ; -} - - -static int python3Present( ) -{ - static int lPython3Present = -1 ; - int i; - - if ( lPython3Present < 0 ) - { - lPython3Present = 0 ; - strcpy(gPython3Name , "python3" ) ; - if ( detectPresence(gPython3Name) ) lPython3Present = 1; - else - { - for ( i = 9 ; i >= 0 ; i -- ) - { - sprintf( gPython3Name , "python3.%d" , i ) ; - if ( detectPresence(gPython3Name) ) - { - lPython3Present = 1; - break; - } - } - /*if ( ! lPython3Present ) - { - strcpy(gPython3Name , "python" ) ; - if ( detectPresence(gPython3Name) ) lPython3Present = 1; - }*/ - } - if (tinyfd_verbose) printf("lPython3Present %d\n", lPython3Present) ; - if (tinyfd_verbose) printf("gPython3Name %s\n", gPython3Name) ; - } - return lPython3Present ; -} - - -static int tkinter2Present( ) -{ - static int lTkinter2Present = -1 ; - char lPythonCommand[256]; - char lPythonParams[256] = -"-S -c \"try:\n\timport Tkinter;\nexcept:\n\tprint 0;\""; - - - if ( lTkinter2Present < 0 ) - { - lTkinter2Present = 0 ; - if ( python2Present() ) - { - sprintf( lPythonCommand , "%s %s" , gPython2Name , lPythonParams ) ; - lTkinter2Present = tryCommand(lPythonCommand) ; - } - if (tinyfd_verbose) printf("lTkinter2Present %d\n", lTkinter2Present) ; - } - return lTkinter2Present && graphicMode() && !(isDarwin() && getenv("SSH_TTY") ); -} - - -static int tkinter3Present( ) -{ - static int lTkinter3Present = -1 ; - char lPythonCommand[256]; - char lPythonParams[256] = - "-S -c \"try:\n\timport tkinter;\nexcept:\n\tprint(0);\""; - - if ( lTkinter3Present < 0 ) - { - lTkinter3Present = 0 ; - if ( python3Present() ) - { - sprintf( lPythonCommand , "%s %s" , gPython3Name , lPythonParams ) ; - lTkinter3Present = tryCommand(lPythonCommand) ; - } - if (tinyfd_verbose) printf("lTkinter3Present %d\n", lTkinter3Present) ; - } - return lTkinter3Present && graphicMode() && !(isDarwin() && getenv("SSH_TTY") ); -} - - -static int pythonDbusPresent( ) -{ - static int lDbusPresent = -1 ; - char lPythonCommand[256]; - char lPythonParams[256] = -"-c \"try:\n\timport dbus;bus=dbus.SessionBus();\ -notif=bus.get_object('org.freedesktop.Notifications','/org/freedesktop/Notifications');\ -notify=dbus.Interface(notif,'org.freedesktop.Notifications');\nexcept:\n\tprint(0);\""; - - if ( lDbusPresent < 0 ) - { - lDbusPresent = 0 ; - if ( python2Present() ) - { - strcpy(gPythonName , gPython2Name ) ; - sprintf( lPythonCommand , "%s %s" , gPythonName , lPythonParams ) ; - lDbusPresent = tryCommand(lPythonCommand) ; - } - - if ( ! lDbusPresent && python3Present() ) - { - strcpy(gPythonName , gPython3Name ) ; - sprintf( lPythonCommand , "%s %s" , gPythonName , lPythonParams ) ; - lDbusPresent = tryCommand(lPythonCommand) ; - } - - if (tinyfd_verbose) printf("lDbusPresent %d\n", lDbusPresent) ; - if (tinyfd_verbose) printf("gPythonName %s\n", gPythonName) ; - } - return lDbusPresent && graphicMode() && !(isDarwin() && getenv("SSH_TTY") ); -} - - -static void sigHandler(int sig) -{ - FILE * lIn ; - if ( ( lIn = popen( "pactl unload-module module-sine" , "r" ) ) ) - { - pclose( lIn ) ; - } -} - -void tinyfd_beep() -{ - char lDialogString [256] ; - FILE * lIn ; - - if ( osascriptPresent() ) - { - if ( afplayPresent() >= 2 ) - { - strcpy( lDialogString , "afplay /System/Library/Sounds/Ping.aiff") ; - } - else - { - strcpy( lDialogString , "osascript -e 'tell application \"System Events\" to beep'") ; - } - } - else if ( pactlPresent() ) - { - signal(SIGINT, sigHandler); - /*strcpy( lDialogString , "pactl load-module module-sine frequency=440;sleep .3;pactl unload-module module-sine" ) ;*/ - strcpy( lDialogString , "thnum=$(pactl load-module module-sine frequency=440);sleep .3;pactl unload-module $thnum" ) ; - } - else if ( speakertestPresent() ) - { - /*strcpy( lDialogString , "timeout -k .3 .3 speaker-test --frequency 440 --test sine > /dev/tty" ) ;*/ - strcpy( lDialogString , "( speaker-test -t sine -f 440 > /dev/tty )& pid=$!;sleep .3; kill -9 $pid" ) ; - } - else if ( beepexePresent() ) - { - strcpy( lDialogString , "beep.exe 440 300" ) ; - } - else - { - strcpy( lDialogString , "printf '\a' > /dev/tty" ) ; - } - - if (tinyfd_verbose) printf( "lDialogString: %s\n" , lDialogString ) ; - - if ( ( lIn = popen( lDialogString , "r" ) ) ) - { - pclose( lIn ) ; - } - - if ( pactlPresent() ) - { - signal(SIGINT, SIG_DFL); - } -} - - -int tinyfd_messageBox( - char const * const aTitle , /* NULL or "" */ - char const * const aMessage , /* NULL or "" may contain \n and \t */ - char const * const aDialogType , /* "ok" "okcancel" "yesno" "yesnocancel" */ - char const * const aIconType , /* "info" "warning" "error" "question" */ - int const aDefaultButton ) /* 0 for cancel/no , 1 for ok/yes , 2 for no in yesnocancel */ -{ - char lBuff [MAX_PATH_OR_CMD] ; - char * lDialogString = NULL ; - char * lpDialogString; - FILE * lIn ; - int lWasGraphicDialog = 0 ; - int lWasXterm = 0 ; - int lResult ; - char lChar ; - struct termios infoOri; - struct termios info; - size_t lTitleLen ; - size_t lMessageLen ; - - lBuff[0]='\0'; - - lTitleLen = aTitle ? strlen(aTitle) : 0 ; - lMessageLen = aMessage ? strlen(aMessage) : 0 ; - if ( !aTitle || strcmp(aTitle,"tinyfd_query") ) - { - lDialogString = (char *) malloc( MAX_PATH_OR_CMD + lTitleLen + lMessageLen ); - } - - if ( osascriptPresent( ) ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"applescript");return 1;} - - strcpy( lDialogString , "osascript "); - if ( ! osx9orBetter() ) strcat( lDialogString , " -e 'tell application \"System Events\"' -e 'Activate'"); - strcat( lDialogString , " -e 'try' -e 'set {vButton} to {button returned} of ( display dialog \"") ; - if ( aMessage && strlen(aMessage) ) - { - strcat(lDialogString, aMessage) ; - } - strcat(lDialogString, "\" ") ; - if ( aTitle && strlen(aTitle) ) - { - strcat(lDialogString, "with title \"") ; - strcat(lDialogString, aTitle) ; - strcat(lDialogString, "\" ") ; - } - strcat(lDialogString, "with icon ") ; - if ( aIconType && ! strcmp( "error" , aIconType ) ) - { - strcat(lDialogString, "stop " ) ; - } - else if ( aIconType && ! strcmp( "warning" , aIconType ) ) - { - strcat(lDialogString, "caution " ) ; - } - else /* question or info */ - { - strcat(lDialogString, "note " ) ; - } - if ( aDialogType && ! strcmp( "okcancel" , aDialogType ) ) - { - if ( ! aDefaultButton ) - { - strcat( lDialogString ,"default button \"Cancel\" " ) ; - } - } - else if ( aDialogType && ! strcmp( "yesno" , aDialogType ) ) - { - strcat( lDialogString ,"buttons {\"No\", \"Yes\"} " ) ; - if (aDefaultButton) - { - strcat( lDialogString ,"default button \"Yes\" " ) ; - } - else - { - strcat( lDialogString ,"default button \"No\" " ) ; - } - strcat( lDialogString ,"cancel button \"No\"" ) ; - } - else if ( aDialogType && ! strcmp( "yesnocancel" , aDialogType ) ) - { - strcat( lDialogString ,"buttons {\"No\", \"Yes\", \"Cancel\"} " ) ; - switch (aDefaultButton) - { - case 1: strcat( lDialogString ,"default button \"Yes\" " ) ; break; - case 2: strcat( lDialogString ,"default button \"No\" " ) ; break; - case 0: strcat( lDialogString ,"default button \"Cancel\" " ) ; break; - } - strcat( lDialogString ,"cancel button \"Cancel\"" ) ; - } - else - { - strcat( lDialogString ,"buttons {\"OK\"} " ) ; - strcat( lDialogString ,"default button \"OK\" " ) ; - } - strcat( lDialogString, ")' ") ; - - strcat( lDialogString, -"-e 'if vButton is \"Yes\" then' -e 'return 1'\ - -e 'else if vButton is \"OK\" then' -e 'return 1'\ - -e 'else if vButton is \"No\" then' -e 'return 2'\ - -e 'else' -e 'return 0' -e 'end if' " ); - - strcat( lDialogString, "-e 'on error number -128' " ) ; - strcat( lDialogString, "-e '0' " ); - - strcat( lDialogString, "-e 'end try'") ; - if ( ! osx9orBetter() ) strcat( lDialogString, " -e 'end tell'") ; - } - else if ( kdialogPresent() ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"kdialog");return 1;} - - strcpy( lDialogString , "kdialog" ) ; - if ( kdialogPresent() == 2 ) - { - strcat(lDialogString, " --attach=$(xprop -root 32x '\t$0' _NET_ACTIVE_WINDOW | cut -f 2)"); /* contribution: Paul Rouget */ - } - - strcat( lDialogString , " --" ) ; - if ( aDialogType && ( ! strcmp( "okcancel" , aDialogType ) - || ! strcmp( "yesno" , aDialogType ) || ! strcmp( "yesnocancel" , aDialogType ) ) ) - { - if ( aIconType && ( ! strcmp( "warning" , aIconType ) - || ! strcmp( "error" , aIconType ) ) ) - { - strcat( lDialogString , "warning" ) ; - } - if ( ! strcmp( "yesnocancel" , aDialogType ) ) - { - strcat( lDialogString , "yesnocancel" ) ; - } - else - { - strcat( lDialogString , "yesno" ) ; - } - } - else if ( aIconType && ! strcmp( "error" , aIconType ) ) - { - strcat( lDialogString , "error" ) ; - } - else if ( aIconType && ! strcmp( "warning" , aIconType ) ) - { - strcat( lDialogString , "sorry" ) ; - } - else - { - strcat( lDialogString , "msgbox" ) ; - } - strcat( lDialogString , " \"" ) ; - if ( aMessage ) - { - strcat( lDialogString , aMessage ) ; - } - strcat( lDialogString , "\"" ) ; - if ( aDialogType && ! strcmp( "okcancel" , aDialogType ) ) - { - strcat( lDialogString , - " --yes-label Ok --no-label Cancel" ) ; - } - if ( aTitle && strlen(aTitle) ) - { - strcat(lDialogString, " --title \"") ; - strcat(lDialogString, aTitle) ; - strcat(lDialogString, "\"") ; - } - - if ( ! strcmp( "yesnocancel" , aDialogType ) ) - { - strcat( lDialogString , "; x=$? ;if [ $x = 0 ] ;then echo 1;elif [ $x = 1 ] ;then echo 2;else echo 0;fi"); - } - else - { - strcat( lDialogString , ";if [ $? = 0 ];then echo 1;else echo 0;fi"); - } - } - else if ( zenityPresent() || matedialogPresent() || shellementaryPresent() || qarmaPresent() ) - { - if ( zenityPresent() ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"zenity");return 1;} - strcpy( lDialogString , "szAnswer=$(zenity" ) ; - if ( (zenity3Present() >= 4) && !getenv("SSH_TTY") ) - { - strcat(lDialogString, " --attach=$(sleep .01;xprop -root 32x '\t$0' _NET_ACTIVE_WINDOW | cut -f 2)"); /* contribution: Paul Rouget */ - } - } - else if ( matedialogPresent() ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"matedialog");return 1;} - strcpy( lDialogString , "szAnswer=$(matedialog" ) ; - } - else if ( shellementaryPresent() ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"shellementary");return 1;} - strcpy( lDialogString , "szAnswer=$(shellementary" ) ; - } - else - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"qarma");return 1;} - strcpy( lDialogString , "szAnswer=$(qarma" ) ; - if ( !getenv("SSH_TTY") ) - { - strcat(lDialogString, " --attach=$(xprop -root 32x '\t$0' _NET_ACTIVE_WINDOW | cut -f 2)"); /* contribution: Paul Rouget */ - } - } - strcat(lDialogString, " --"); - - if ( aDialogType && ! strcmp( "okcancel" , aDialogType ) ) - { - strcat( lDialogString , - "question --ok-label=Ok --cancel-label=Cancel" ) ; - } - else if ( aDialogType && ! strcmp( "yesno" , aDialogType ) ) - { - strcat( lDialogString , "question" ) ; - } - else if ( aDialogType && ! strcmp( "yesnocancel" , aDialogType ) ) - { - strcat( lDialogString , "list --column \"\" --hide-header \"Yes\" \"No\"" ) ; - } - else if ( aIconType && ! strcmp( "error" , aIconType ) ) - { - strcat( lDialogString , "error" ) ; - } - else if ( aIconType && ! strcmp( "warning" , aIconType ) ) - { - strcat( lDialogString , "warning" ) ; - } - else - { - strcat( lDialogString , "info" ) ; - } - if ( aTitle && strlen(aTitle) ) - { - strcat(lDialogString, " --title=\"") ; - strcat(lDialogString, aTitle) ; - strcat(lDialogString, "\"") ; - } - if ( aMessage && strlen(aMessage) ) - { - strcat(lDialogString, " --text=\"") ; - strcat(lDialogString, aMessage) ; - strcat(lDialogString, "\"") ; - } - if ( (zenity3Present() >= 3) || (!zenityPresent() && (shellementaryPresent() || qarmaPresent()) ) ) - { - strcat( lDialogString , " --icon-name=dialog-" ) ; - if ( aIconType && (! strcmp( "question" , aIconType ) - || ! strcmp( "error" , aIconType ) - || ! strcmp( "warning" , aIconType ) ) ) - { - strcat( lDialogString , aIconType ) ; - } - else - { - strcat( lDialogString , "information" ) ; - } - } - - if ( ! strcmp( "yesnocancel" , aDialogType ) ) - { - strcat( lDialogString , -");if [ $? = 1 ];then echo 0;elif [ $szAnswer = \"No\" ];then echo 2;else echo 1;fi"); - } - else - { - strcat( lDialogString , ");if [ $? = 0 ];then echo 1;else echo 0;fi"); - } - } - else if ( !gxmessagePresent() && !gmessagePresent() && !gdialogPresent() && !xdialogPresent() && tkinter2Present() ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"python2-tkinter");return 1;} - - strcpy( lDialogString , gPython2Name ) ; - if ( ! isTerminalRunning( ) && isDarwin( ) ) - { - strcat( lDialogString , " -i" ) ; /* for osx without console */ - } - - strcat( lDialogString , -" -S -c \"import Tkinter,tkMessageBox;root=Tkinter.Tk();root.withdraw();"); - - if ( isDarwin( ) ) - { - strcat( lDialogString , -"import os;os.system('''/usr/bin/osascript -e 'tell app \\\"Finder\\\" to set \ -frontmost of process \\\"Python\\\" to true' ''');"); - } - - strcat( lDialogString ,"res=tkMessageBox." ) ; - if ( aDialogType && ! strcmp( "okcancel" , aDialogType ) ) - { - strcat( lDialogString , "askokcancel(" ) ; - if ( aDefaultButton ) - { - strcat( lDialogString , "default=tkMessageBox.OK," ) ; - } - else - { - strcat( lDialogString , "default=tkMessageBox.CANCEL," ) ; - } - } - else if ( aDialogType && ! strcmp( "yesno" , aDialogType ) ) - { - strcat( lDialogString , "askyesno(" ) ; - if ( aDefaultButton ) - { - strcat( lDialogString , "default=tkMessageBox.YES," ) ; - } - else - { - strcat( lDialogString , "default=tkMessageBox.NO," ) ; - } - } - else if ( aDialogType && ! strcmp( "yesnocancel" , aDialogType ) ) - { - strcat( lDialogString , "askyesnocancel(" ) ; - switch ( aDefaultButton ) - { - case 1: strcat( lDialogString , "default=tkMessageBox.YES," ); break; - case 2: strcat( lDialogString , "default=tkMessageBox.NO," ); break; - case 0: strcat( lDialogString , "default=tkMessageBox.CANCEL," ); break; - } - } - else - { - strcat( lDialogString , "showinfo(" ) ; - } - - strcat( lDialogString , "icon='" ) ; - if ( aIconType && (! strcmp( "question" , aIconType ) - || ! strcmp( "error" , aIconType ) - || ! strcmp( "warning" , aIconType ) ) ) - { - strcat( lDialogString , aIconType ) ; - } - else - { - strcat( lDialogString , "info" ) ; - } - - strcat(lDialogString, "',") ; - if ( aTitle && strlen(aTitle) ) - { - strcat(lDialogString, "title='") ; - strcat(lDialogString, aTitle) ; - strcat(lDialogString, "',") ; - } - if ( aMessage && strlen(aMessage) ) - { - strcat(lDialogString, "message='") ; - lpDialogString = lDialogString + strlen(lDialogString); - replaceSubStr( aMessage , "\n" , "\\n" , lpDialogString ) ; - strcat(lDialogString, "'") ; - } - - if ( aDialogType && ! strcmp( "yesnocancel" , aDialogType ) ) - { - strcat(lDialogString, ");\n\ -if res is None :\n\tprint 0\n\ -elif res is False :\n\tprint 2\n\ -else :\n\tprint 1\n\"" ) ; - } - else - { - strcat(lDialogString, ");\n\ -if res is False :\n\tprint 0\n\ -else :\n\tprint 1\n\"" ) ; - } - } - else if ( !gxmessagePresent() && !gmessagePresent() && !gdialogPresent() && !xdialogPresent() && tkinter3Present() ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"python3-tkinter");return 1;} - - strcpy( lDialogString , gPython3Name ) ; - strcat( lDialogString , - " -S -c \"import tkinter;from tkinter import messagebox;root=tkinter.Tk();root.withdraw();"); - - strcat( lDialogString ,"res=messagebox." ) ; - if ( aDialogType && ! strcmp( "okcancel" , aDialogType ) ) - { - strcat( lDialogString , "askokcancel(" ) ; - if ( aDefaultButton ) - { - strcat( lDialogString , "default=messagebox.OK," ) ; - } - else - { - strcat( lDialogString , "default=messagebox.CANCEL," ) ; - } - } - else if ( aDialogType && ! strcmp( "yesno" , aDialogType ) ) - { - strcat( lDialogString , "askyesno(" ) ; - if ( aDefaultButton ) - { - strcat( lDialogString , "default=messagebox.YES," ) ; - } - else - { - strcat( lDialogString , "default=messagebox.NO," ) ; - } - } - else if ( aDialogType && ! strcmp( "yesnocancel" , aDialogType ) ) - { - strcat( lDialogString , "askyesnocancel(" ) ; - switch ( aDefaultButton ) - { - case 1: strcat( lDialogString , "default=messagebox.YES," ); break; - case 2: strcat( lDialogString , "default=messagebox.NO," ); break; - case 0: strcat( lDialogString , "default=messagebox.CANCEL," ); break; - } - } - else - { - strcat( lDialogString , "showinfo(" ) ; - } - - strcat( lDialogString , "icon='" ) ; - if ( aIconType && (! strcmp( "question" , aIconType ) - || ! strcmp( "error" , aIconType ) - || ! strcmp( "warning" , aIconType ) ) ) - { - strcat( lDialogString , aIconType ) ; - } - else - { - strcat( lDialogString , "info" ) ; - } - - strcat(lDialogString, "',") ; - if ( aTitle && strlen(aTitle) ) - { - strcat(lDialogString, "title='") ; - strcat(lDialogString, aTitle) ; - strcat(lDialogString, "',") ; - } - if ( aMessage && strlen(aMessage) ) - { - strcat(lDialogString, "message='") ; - lpDialogString = lDialogString + strlen(lDialogString); - replaceSubStr( aMessage , "\n" , "\\n" , lpDialogString ) ; - strcat(lDialogString, "'") ; - } - - if ( aDialogType && ! strcmp( "yesnocancel" , aDialogType ) ) - { - strcat(lDialogString, ");\n\ -if res is None :\n\tprint(0)\n\ -elif res is False :\n\tprint(2)\n\ -else :\n\tprint 1\n\"" ) ; - } - else - { - strcat(lDialogString, ");\n\ -if res is False :\n\tprint(0)\n\ -else :\n\tprint(1)\n\"" ) ; - } - } - else if ( gxmessagePresent() || gmessagePresent() || (!gdialogPresent() && !xdialogPresent() && xmessagePresent()) ) - { - if ( gxmessagePresent() ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"gxmessage");return 1;} - strcpy( lDialogString , "gxmessage"); - } - else if ( gmessagePresent() ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"gmessage");return 1;} - strcpy( lDialogString , "gmessage"); - } - else - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"xmessage");return 1;} - strcpy( lDialogString , "xmessage"); - } - - if ( aDialogType && ! strcmp("okcancel" , aDialogType) ) - { - strcat( lDialogString , " -buttons Ok:1,Cancel:0"); - switch ( aDefaultButton ) - { - case 1: strcat( lDialogString , " -default Ok"); break; - case 0: strcat( lDialogString , " -default Cancel"); break; - } - } - else if ( aDialogType && ! strcmp("yesno" , aDialogType) ) - { - strcat( lDialogString , " -buttons Yes:1,No:0"); - switch ( aDefaultButton ) - { - case 1: strcat( lDialogString , " -default Yes"); break; - case 0: strcat( lDialogString , " -default No"); break; - } - } - else if ( aDialogType && ! strcmp("yesnocancel" , aDialogType) ) - { - strcat( lDialogString , " -buttons Yes:1,No:2,Cancel:0"); - switch ( aDefaultButton ) - { - case 1: strcat( lDialogString , " -default Yes"); break; - case 2: strcat( lDialogString , " -default No"); break; - case 0: strcat( lDialogString , " -default Cancel"); break; - } - } - else - { - strcat( lDialogString , " -buttons Ok:1"); - strcat( lDialogString , " -default Ok"); - } - - strcat( lDialogString , " -center \""); - if ( aMessage && strlen(aMessage) ) - { - strcat( lDialogString , aMessage ) ; - } - strcat(lDialogString, "\"" ) ; - if ( aTitle && strlen(aTitle) ) - { - strcat( lDialogString , " -title \""); - strcat( lDialogString , aTitle ) ; - strcat( lDialogString, "\"" ) ; - } - strcat( lDialogString , " ; echo $? "); - } - else if ( xdialogPresent() || gdialogPresent() || dialogName() || whiptailPresent() ) - { - if ( gdialogPresent( ) ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"gdialog");return 1;} - lWasGraphicDialog = 1 ; - strcpy( lDialogString , "(gdialog " ) ; - } - else if ( xdialogPresent( ) ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"xdialog");return 1;} - lWasGraphicDialog = 1 ; - strcpy( lDialogString , "(Xdialog " ) ; - } - else if ( dialogName( ) ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"dialog");return 0;} - if ( isTerminalRunning( ) ) - { - strcpy( lDialogString , "(dialog " ) ; - } - else - { - lWasXterm = 1 ; - strcpy( lDialogString , terminalName() ) ; - strcat( lDialogString , "'(" ) ; - strcat( lDialogString , dialogName() ) ; - strcat( lDialogString , " " ) ; - } - } - else if ( isTerminalRunning( ) ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"whiptail");return 0;} - strcpy( lDialogString , "(whiptail " ) ; - } - else - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"whiptail");return 0;} - lWasXterm = 1 ; - strcpy( lDialogString , terminalName() ) ; - strcat( lDialogString , "'(whiptail " ) ; - } - - if ( aTitle && strlen(aTitle) ) - { - strcat(lDialogString, "--title \"") ; - strcat(lDialogString, aTitle) ; - strcat(lDialogString, "\" ") ; - } - - if ( !xdialogPresent() && !gdialogPresent() ) - { - if ( aDialogType && ( !strcmp( "okcancel" , aDialogType ) || !strcmp( "yesno" , aDialogType ) - || !strcmp( "yesnocancel" , aDialogType ) ) ) - { - strcat(lDialogString, "--backtitle \"") ; - strcat(lDialogString, "tab: move focus") ; - strcat(lDialogString, "\" ") ; - } - } - - if ( aDialogType && ! strcmp( "okcancel" , aDialogType ) ) - { - if ( ! aDefaultButton ) - { - strcat( lDialogString , "--defaultno " ) ; - } - strcat( lDialogString , - "--yes-label \"Ok\" --no-label \"Cancel\" --yesno " ) ; - } - else if ( aDialogType && ! strcmp( "yesno" , aDialogType ) ) - { - if ( ! aDefaultButton ) - { - strcat( lDialogString , "--defaultno " ) ; - } - strcat( lDialogString , "--yesno " ) ; - } - else if (aDialogType && !strcmp("yesnocancel", aDialogType)) - { - if (!aDefaultButton) - { - strcat(lDialogString, "--defaultno "); - } - strcat(lDialogString, "--menu "); - } - else - { - strcat( lDialogString , "--msgbox " ) ; - - } - strcat( lDialogString , "\"" ) ; - if ( aMessage && strlen(aMessage) ) - { - strcat(lDialogString, aMessage) ; - } - strcat(lDialogString, "\" "); - - if ( lWasGraphicDialog ) - { - if (aDialogType && !strcmp("yesnocancel", aDialogType)) - { - strcat(lDialogString,"0 60 0 Yes \"\" No \"\") 2>/tmp/tinyfd.txt;\ -if [ $? = 0 ];then tinyfdBool=1;else tinyfdBool=0;fi;\ -tinyfdRes=$(cat /tmp/tinyfd.txt);echo $tinyfdBool$tinyfdRes") ; - } - else - { - strcat(lDialogString, - "10 60 ) 2>&1;if [ $? = 0 ];then echo 1;else echo 0;fi"); - } - } - else - { - if (aDialogType && !strcmp("yesnocancel", aDialogType)) - { - strcat(lDialogString,"0 60 0 Yes \"\" No \"\" >/dev/tty ) 2>/tmp/tinyfd.txt;\ - if [ $? = 0 ];then tinyfdBool=1;else tinyfdBool=0;fi;\ - tinyfdRes=$(cat /tmp/tinyfd.txt);echo $tinyfdBool$tinyfdRes") ; - - if ( lWasXterm ) - { - strcat(lDialogString," >/tmp/tinyfd0.txt';cat /tmp/tinyfd0.txt"); - } - else - { - strcat(lDialogString, "; clear >/dev/tty") ; - } - } - else - { - strcat(lDialogString, "10 60 >/dev/tty) 2>&1;if [ $? = 0 ];"); - if ( lWasXterm ) - { - strcat( lDialogString , -"then\n\techo 1\nelse\n\techo 0\nfi >/tmp/tinyfd.txt';cat /tmp/tinyfd.txt;rm /tmp/tinyfd.txt"); - } - else - { - strcat(lDialogString, - "then echo 1;else echo 0;fi;clear >/dev/tty"); - } - } - } - } - else if ( isTerminalRunning( ) && terminalName() ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"basicinput");return 0;} - strcpy( lDialogString , terminalName() ) ; - strcat( lDialogString , "'" ) ; - if ( !gWarningDisplayed && !tinyfd_forceConsole) - { - gWarningDisplayed = 1 ; - strcat( lDialogString , "echo \"" ) ; - strcat( lDialogString, gTitle) ; - strcat( lDialogString , "\";" ) ; - strcat( lDialogString , "echo \"" ) ; - strcat( lDialogString, tinyfd_needs) ; - strcat( lDialogString , "\";echo;echo;" ) ; - } - if ( aTitle && strlen(aTitle) ) - { - strcat( lDialogString , "echo \"" ) ; - strcat( lDialogString, aTitle) ; - strcat( lDialogString , "\";echo;" ) ; - } - if ( aMessage && strlen(aMessage) ) - { - strcat( lDialogString , "echo \"" ) ; - strcat( lDialogString, aMessage) ; - strcat( lDialogString , "\"; " ) ; - } - if ( aDialogType && !strcmp("yesno",aDialogType) ) - { - strcat( lDialogString , "echo -n \"y/n: \"; " ) ; - strcat( lDialogString , "stty sane -echo;" ) ; - strcat( lDialogString , - "answer=$( while ! head -c 1 | grep -i [ny];do true ;done);"); - strcat( lDialogString , - "if echo \"$answer\" | grep -iq \"^y\";then\n"); - strcat( lDialogString , "\techo 1\nelse\n\techo 0\nfi" ) ; - } - else if ( aDialogType && !strcmp("okcancel",aDialogType) ) - { - strcat( lDialogString , "echo -n \"[O]kay/[C]ancel: \"; " ) ; - strcat( lDialogString , "stty sane -echo;" ) ; - strcat( lDialogString , - "answer=$( while ! head -c 1 | grep -i [oc];do true ;done);"); - strcat( lDialogString , - "if echo \"$answer\" | grep -iq \"^o\";then\n"); - strcat( lDialogString , "\techo 1\nelse\n\techo 0\nfi" ) ; - } - else if ( aDialogType && !strcmp("yesnocancel",aDialogType) ) - { - strcat( lDialogString , "echo -n \"[Y]es/[N]o/[C]ancel: \"; " ) ; - strcat( lDialogString , "stty sane -echo;" ) ; - strcat( lDialogString , - "answer=$( while ! head -c 1 | grep -i [nyc];do true ;done);"); - strcat( lDialogString , - "if echo \"$answer\" | grep -iq \"^y\";then\n\techo 1\n"); - strcat( lDialogString , "elif echo \"$answer\" | grep -iq \"^n\";then\n\techo 2\n" ) ; - strcat( lDialogString , "else\n\techo 0\nfi" ) ; - } - else - { - strcat(lDialogString , "echo -n \"press enter to continue \"; "); - strcat( lDialogString , "stty sane -echo;" ) ; - strcat( lDialogString , - "answer=$( while ! head -c 1;do true ;done);echo 1"); - } - strcat( lDialogString , - " >/tmp/tinyfd.txt';cat /tmp/tinyfd.txt;rm /tmp/tinyfd.txt"); - } - else if ( !isTerminalRunning() && pythonDbusPresent() && !strcmp("ok" , aDialogType) ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"python-dbus");return 1;} - strcpy( lDialogString , gPythonName ) ; - strcat( lDialogString ," -c \"import dbus;bus=dbus.SessionBus();"); - strcat( lDialogString ,"notif=bus.get_object('org.freedesktop.Notifications','/org/freedesktop/Notifications');" ) ; - strcat( lDialogString ,"notify=dbus.Interface(notif,'org.freedesktop.Notifications');" ) ; - strcat( lDialogString ,"notify.Notify('',0,'" ) ; - if ( aIconType && strlen(aIconType) ) - { - strcat( lDialogString , aIconType ) ; - } - strcat(lDialogString, "','") ; - if ( aTitle && strlen(aTitle) ) - { - strcat(lDialogString, aTitle) ; - } - strcat(lDialogString, "','") ; - if ( aMessage && strlen(aMessage) ) - { - lpDialogString = lDialogString + strlen(lDialogString); - replaceSubStr( aMessage , "\n" , "\\n" , lpDialogString ) ; - } - strcat(lDialogString, "','','',5000)\"") ; - } - else if ( !isTerminalRunning() && (perlPresent() >= 2) && !strcmp("ok" , aDialogType) ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"perl-dbus");return 1;} - - sprintf( lDialogString , "perl -e \"use Net::DBus;\ - my \\$sessionBus = Net::DBus->session;\ - my \\$notificationsService = \\$sessionBus->get_service('org.freedesktop.Notifications');\ - my \\$notificationsObject = \\$notificationsService->get_object('/org/freedesktop/Notifications',\ - 'org.freedesktop.Notifications');\ - my \\$notificationId;\\$notificationId = \\$notificationsObject->Notify(shift, 0, '%s', '%s', '%s', [], {}, -1);\" ", - aIconType?aIconType:"", aTitle?aTitle:"", aMessage?aMessage:"" ) ; - } - else if ( !isTerminalRunning() && notifysendPresent() && !strcmp("ok" , aDialogType) ) - { - - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"notifysend");return 1;} - strcpy( lDialogString , "notify-send" ) ; - if ( aIconType && strlen(aIconType) ) - { - strcat( lDialogString , " -i '" ) ; - strcat( lDialogString , aIconType ) ; - strcat( lDialogString , "'" ) ; - } - strcat( lDialogString , " \"" ) ; - if ( aTitle && strlen(aTitle) ) - { - strcat(lDialogString, aTitle) ; - strcat( lDialogString , " | " ) ; - } - if ( aMessage && strlen(aMessage) ) - { - replaceSubStr( aMessage , "\n\t" , " | " , lBuff ) ; - replaceSubStr( aMessage , "\n" , " | " , lBuff ) ; - replaceSubStr( aMessage , "\t" , " " , lBuff ) ; - strcat(lDialogString, lBuff) ; - } - strcat( lDialogString , "\"" ) ; - } - else - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"basicinput");return 0;} - if ( !gWarningDisplayed && !tinyfd_forceConsole) - { - gWarningDisplayed = 1 ; - printf("\n\n%s\n", gTitle); - printf("%s\n\n", tinyfd_needs); - } - if ( aTitle && strlen(aTitle) ) - { - printf("\n%s\n", aTitle); - } - - tcgetattr(0, &infoOri); - tcgetattr(0, &info); - info.c_lflag &= ~ICANON; - info.c_cc[VMIN] = 1; - info.c_cc[VTIME] = 0; - tcsetattr(0, TCSANOW, &info); - if ( aDialogType && !strcmp("yesno",aDialogType) ) - { - do - { - if ( aMessage && strlen(aMessage) ) - { - printf("\n%s\n",aMessage); - } - printf("y/n: "); fflush(stdout); - lChar = tolower( getchar() ) ; - printf("\n\n"); - } - while ( lChar != 'y' && lChar != 'n' ); - lResult = lChar == 'y' ? 1 : 0 ; - } - else if ( aDialogType && !strcmp("okcancel",aDialogType) ) - { - do - { - if ( aMessage && strlen(aMessage) ) - { - printf("\n%s\n",aMessage); - } - printf("[O]kay/[C]ancel: "); fflush(stdout); - lChar = tolower( getchar() ) ; - printf("\n\n"); - } - while ( lChar != 'o' && lChar != 'c' ); - lResult = lChar == 'o' ? 1 : 0 ; - } - else if ( aDialogType && !strcmp("yesnocancel",aDialogType) ) - { - do - { - if ( aMessage && strlen(aMessage) ) - { - printf("\n%s\n",aMessage); - } - printf("[Y]es/[N]o/[C]ancel: "); fflush(stdout); - lChar = tolower( getchar() ) ; - printf("\n\n"); - } - while ( lChar != 'y' && lChar != 'n' && lChar != 'c' ); - lResult = (lChar == 'y') ? 1 : (lChar == 'n') ? 2 : 0 ; - } - else - { - if ( aMessage && strlen(aMessage) ) - { - printf("\n%s\n\n",aMessage); - } - printf("press enter to continue "); fflush(stdout); - getchar() ; - printf("\n\n"); - lResult = 1 ; - } - tcsetattr(0, TCSANOW, &infoOri); - free(lDialogString); - return lResult ; - } - - if (tinyfd_verbose) printf( "lDialogString: %s\n" , lDialogString ) ; - - if ( ! ( lIn = popen( lDialogString , "r" ) ) ) - { - free(lDialogString); - return 0 ; - } - while ( fgets( lBuff , sizeof( lBuff ) , lIn ) != NULL ) - {} - - pclose( lIn ) ; - - /* printf( "lBuff: %s len: %lu \n" , lBuff , strlen(lBuff) ) ; */ - if ( lBuff[strlen( lBuff ) -1] == '\n' ) - { - lBuff[strlen( lBuff ) -1] = '\0' ; - } - /* printf( "lBuff1: %s len: %lu \n" , lBuff , strlen(lBuff) ) ; */ - - if (aDialogType && !strcmp("yesnocancel", aDialogType)) - { - if ( lBuff[0]=='1' ) - { - if ( !strcmp( lBuff+1 , "Yes" )) strcpy(lBuff,"1"); - else if ( !strcmp( lBuff+1 , "No" )) strcpy(lBuff,"2"); - } - } - /* printf( "lBuff2: %s len: %lu \n" , lBuff , strlen(lBuff) ) ; */ - - lResult = !strcmp( lBuff , "2" ) ? 2 : !strcmp( lBuff , "1" ) ? 1 : 0; - - /* printf( "lResult: %d\n" , lResult ) ; */ - free(lDialogString); - return lResult ; -} - - -/* return has only meaning for tinyfd_query */ -int tinyfd_notifyPopup( - char const * const aTitle , /* NULL or "" */ - char const * const aMessage , /* NULL or "" may contain \n and \t */ - char const * const aIconType ) /* "info" "warning" "error" */ -{ - char lBuff[MAX_PATH_OR_CMD]; - char * lDialogString = NULL ; - char * lpDialogString ; - FILE * lIn ; - size_t lTitleLen ; - size_t lMessageLen ; - - if ( getenv("SSH_TTY") ) - { - return tinyfd_messageBox(aTitle, aMessage, "ok", aIconType, 0); - } - - lTitleLen = aTitle ? strlen(aTitle) : 0 ; - lMessageLen = aMessage ? strlen(aMessage) : 0 ; - if ( !aTitle || strcmp(aTitle,"tinyfd_query") ) - { - lDialogString = (char *) malloc( MAX_PATH_OR_CMD + lTitleLen + lMessageLen ); - } - - if ( osascriptPresent( ) ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"applescript");return 1;} - - strcpy( lDialogString , "osascript "); - if ( ! osx9orBetter() ) strcat( lDialogString , " -e 'tell application \"System Events\"' -e 'Activate'"); - strcat( lDialogString , " -e 'try' -e 'display notification \"") ; - if ( aMessage && strlen(aMessage) ) - { - strcat(lDialogString, aMessage) ; - } - strcat(lDialogString, " \" ") ; - if ( aTitle && strlen(aTitle) ) - { - strcat(lDialogString, "with title \"") ; - strcat(lDialogString, aTitle) ; - strcat(lDialogString, "\" ") ; - } - - strcat( lDialogString, "' -e 'end try'") ; - if ( ! osx9orBetter() ) strcat( lDialogString, " -e 'end tell'") ; - } - else if ( kdialogPresent() ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"kdialog");return 1;} - strcpy( lDialogString , "kdialog" ) ; - - if ( aIconType && strlen(aIconType) ) - { - strcat( lDialogString , " --icon '" ) ; - strcat( lDialogString , aIconType ) ; - strcat( lDialogString , "'" ) ; - } - if ( aTitle && strlen(aTitle) ) - { - strcat( lDialogString , " --title \"" ) ; - strcat( lDialogString , aTitle ) ; - strcat( lDialogString , "\"" ) ; - } - - strcat( lDialogString , " --passivepopup" ) ; - strcat( lDialogString , " \"" ) ; - if ( aMessage ) - { - strcat( lDialogString , aMessage ) ; - } - strcat( lDialogString , " \" 5" ) ; - } - else if ( (zenity3Present()>=4) || matedialogPresent() || shellementaryPresent() || qarmaPresent() ) - { - /* zenity 2.32 has the notification but with a bug: it doesnt return from it */ - /* zenity 3.8 show the notification as an alert ok cancel box */ - if ( zenity3Present()>=3 ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"zenity");return 1;} - strcpy( lDialogString , "zenity" ) ; - } - else if ( matedialogPresent() ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"matedialog");return 1;} - strcpy( lDialogString , "matedialog" ) ; - } - else if ( shellementaryPresent() ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"shellementary");return 1;} - strcpy( lDialogString , "shellementary" ) ; - } - else - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"qarma");return 1;} - strcpy( lDialogString , "qarma" ) ; - } - - strcat( lDialogString , " --notification"); - - if ( aIconType && strlen( aIconType ) ) - { - strcat( lDialogString , " --window-icon '"); - strcat( lDialogString , aIconType ) ; - strcat( lDialogString , "'" ) ; - } - - strcat( lDialogString , " --text \"" ) ; - if ( aTitle && strlen(aTitle) ) - { - strcat(lDialogString, aTitle) ; - strcat(lDialogString, "\n") ; - } - if ( aMessage && strlen( aMessage ) ) - { - strcat( lDialogString , aMessage ) ; - } - strcat( lDialogString , " \"" ) ; - } - else if ( perlPresent() >= 2 ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"perl-dbus");return 1;} - sprintf( lDialogString , "perl -e \"use Net::DBus;\ - my \\$sessionBus = Net::DBus->session;\ - my \\$notificationsService = \\$sessionBus->get_service('org.freedesktop.Notifications');\ - my \\$notificationsObject = \\$notificationsService->get_object('/org/freedesktop/Notifications',\ - 'org.freedesktop.Notifications');\ - my \\$notificationId;\\$notificationId = \\$notificationsObject->Notify(shift, 0, '%s', '%s', '%s', [], {}, -1);\" ", - aIconType?aIconType:"", aTitle?aTitle:"", aMessage?aMessage:"" ) ; - } - else if ( pythonDbusPresent( ) ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"python-dbus");return 1;} - strcpy( lDialogString , gPythonName ) ; - strcat( lDialogString ," -c \"import dbus;bus=dbus.SessionBus();"); - strcat( lDialogString ,"notif=bus.get_object('org.freedesktop.Notifications','/org/freedesktop/Notifications');" ) ; - strcat( lDialogString ,"notify=dbus.Interface(notif,'org.freedesktop.Notifications');" ) ; - strcat( lDialogString ,"notify.Notify('',0,'" ) ; - if ( aIconType && strlen(aIconType) ) - { - strcat( lDialogString , aIconType ) ; - } - strcat(lDialogString, "','") ; - if ( aTitle && strlen(aTitle) ) - { - strcat(lDialogString, aTitle) ; - } - strcat(lDialogString, "','") ; - if ( aMessage && strlen(aMessage) ) - { - lpDialogString = lDialogString + strlen(lDialogString); - replaceSubStr( aMessage , "\n" , "\\n" , lpDialogString ) ; - } - strcat(lDialogString, "','','',5000)\"") ; - } - else if ( notifysendPresent() ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"notifysend");return 1;} - strcpy( lDialogString , "notify-send" ) ; - if ( aIconType && strlen(aIconType) ) - { - strcat( lDialogString , " -i '" ) ; - strcat( lDialogString , aIconType ) ; - strcat( lDialogString , "'" ) ; - } - strcat( lDialogString , " \"" ) ; - if ( aTitle && strlen(aTitle) ) - { - strcat(lDialogString, aTitle) ; - strcat( lDialogString , " | " ) ; - } - if ( aMessage && strlen(aMessage) ) - { - replaceSubStr( aMessage , "\n\t" , " | " , lBuff ) ; - replaceSubStr( aMessage , "\n" , " | " , lBuff ) ; - replaceSubStr( aMessage , "\t" , " " , lBuff ) ; - strcat(lDialogString, lBuff) ; - } - strcat( lDialogString , "\"" ) ; - } - else - { - return tinyfd_messageBox(aTitle, aMessage, "ok", aIconType, 0); - } - - if (tinyfd_verbose) printf( "lDialogString: %s\n" , lDialogString ) ; - - if ( ! ( lIn = popen( lDialogString , "r" ) ) ) - { - free(lDialogString); - return 0 ; - } - - pclose( lIn ) ; - free(lDialogString); - return 1; -} - - -/* returns NULL on cancel */ -char const * tinyfd_inputBox( - char const * const aTitle , /* NULL or "" */ - char const * const aMessage , /* NULL or "" may NOT contain \n nor \t */ - char const * const aDefaultInput ) /* "" , if NULL it's a passwordBox */ -{ - static char lBuff[MAX_PATH_OR_CMD]; - char * lDialogString = NULL; - char * lpDialogString; - FILE * lIn ; - int lResult ; - int lWasGdialog = 0 ; - int lWasGraphicDialog = 0 ; - int lWasXterm = 0 ; - int lWasBasicXterm = 0 ; - struct termios oldt ; - struct termios newt ; - char * lEOF; - size_t lTitleLen ; - size_t lMessageLen ; - - lBuff[0]='\0'; - - lTitleLen = aTitle ? strlen(aTitle) : 0 ; - lMessageLen = aMessage ? strlen(aMessage) : 0 ; - if ( !aTitle || strcmp(aTitle,"tinyfd_query") ) - { - lDialogString = (char *) malloc( MAX_PATH_OR_CMD + lTitleLen + lMessageLen ); - } - - if ( osascriptPresent( ) ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"applescript");return (char const *)1;} - strcpy( lDialogString , "osascript "); - if ( ! osx9orBetter() ) strcat( lDialogString , " -e 'tell application \"System Events\"' -e 'Activate'"); - strcat( lDialogString , " -e 'try' -e 'display dialog \"") ; - if ( aMessage && strlen(aMessage) ) - { - strcat(lDialogString, aMessage) ; - } - strcat(lDialogString, "\" ") ; - strcat(lDialogString, "default answer \"") ; - if ( aDefaultInput && strlen(aDefaultInput) ) - { - strcat(lDialogString, aDefaultInput) ; - } - strcat(lDialogString, "\" ") ; - if ( ! aDefaultInput ) - { - strcat(lDialogString, "hidden answer true ") ; - } - if ( aTitle && strlen(aTitle) ) - { - strcat(lDialogString, "with title \"") ; - strcat(lDialogString, aTitle) ; - strcat(lDialogString, "\" ") ; - } - strcat(lDialogString, "with icon note' ") ; - strcat(lDialogString, "-e '\"1\" & text returned of result' " ); - strcat(lDialogString, "-e 'on error number -128' " ) ; - strcat(lDialogString, "-e '0' " ); - strcat(lDialogString, "-e 'end try'") ; - if ( ! osx9orBetter() ) strcat(lDialogString, " -e 'end tell'") ; - } - else if ( kdialogPresent() ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"kdialog");return (char const *)1;} - strcpy( lDialogString , "szAnswer=$(kdialog" ) ; - - if ( kdialogPresent() == 2 ) - { - strcat(lDialogString, " --attach=$(xprop -root 32x '\t$0' _NET_ACTIVE_WINDOW | cut -f 2)"); /* contribution: Paul Rouget */ - } - - if ( ! aDefaultInput ) - { - strcat(lDialogString, " --password ") ; - } - else - { - strcat(lDialogString, " --inputbox ") ; - - } - strcat(lDialogString, "\"") ; - if ( aMessage && strlen(aMessage) ) - { - strcat(lDialogString, aMessage ) ; - } - strcat(lDialogString , "\" \"" ) ; - if ( aDefaultInput && strlen(aDefaultInput) ) - { - strcat(lDialogString, aDefaultInput ) ; - } - strcat(lDialogString , "\"" ) ; - if ( aTitle && strlen(aTitle) ) - { - strcat(lDialogString, " --title \"") ; - strcat(lDialogString, aTitle) ; - strcat(lDialogString, "\"") ; - } - strcat( lDialogString , - ");if [ $? = 0 ];then echo 1$szAnswer;else echo 0$szAnswer;fi"); - } - else if ( zenityPresent() || matedialogPresent() || shellementaryPresent() || qarmaPresent() ) - { - if ( zenityPresent() ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"zenity");return (char const *)1;} - strcpy( lDialogString , "szAnswer=$(zenity" ) ; - if ( (zenity3Present() >= 4) && !getenv("SSH_TTY") ) - { - strcat( lDialogString, " --attach=$(sleep .01;xprop -root 32x '\t$0' _NET_ACTIVE_WINDOW | cut -f 2)"); /* contribution: Paul Rouget */ - } - } - else if ( matedialogPresent() ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"matedialog");return (char const *)1;} - strcpy( lDialogString , "szAnswer=$(matedialog" ) ; - } - else if ( shellementaryPresent() ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"shellementary");return (char const *)1;} - strcpy( lDialogString , "szAnswer=$(shellementary" ) ; - } - else - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"qarma");return (char const *)1;} - strcpy( lDialogString , "szAnswer=$(qarma" ) ; - if ( !getenv("SSH_TTY") ) - { - strcat(lDialogString, " --attach=$(xprop -root 32x '\t$0' _NET_ACTIVE_WINDOW | cut -f 2)"); /* contribution: Paul Rouget */ - } - } - strcat( lDialogString ," --entry" ) ; - - if ( aTitle && strlen(aTitle) ) - { - strcat(lDialogString, " --title=\"") ; - strcat(lDialogString, aTitle) ; - strcat(lDialogString, "\"") ; - } - if ( aMessage && strlen(aMessage) ) - { - strcat(lDialogString, " --text=\"") ; - strcat(lDialogString, aMessage) ; - strcat(lDialogString, "\"") ; - } - if ( aDefaultInput && strlen(aDefaultInput) ) - { - strcat(lDialogString, " --entry-text=\"") ; - strcat(lDialogString, aDefaultInput) ; - strcat(lDialogString, "\"") ; - } - else - { - strcat(lDialogString, " --hide-text") ; - } - strcat( lDialogString , - ");if [ $? = 0 ];then echo 1$szAnswer;else echo 0$szAnswer;fi"); - } - else if ( gxmessagePresent() || gmessagePresent() ) - { - if ( gxmessagePresent() ) { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"gxmessage");return (char const *)1;} - strcpy( lDialogString , "szAnswer=$(gxmessage -buttons Ok:1,Cancel:0 -center \""); - } - else - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"gmessage");return (char const *)1;} - strcpy( lDialogString , "szAnswer=$(gmessage -buttons Ok:1,Cancel:0 -center \""); - } - - if ( aMessage && strlen(aMessage) ) - { - strcat( lDialogString , aMessage ) ; - } - strcat(lDialogString, "\"" ) ; - if ( aTitle && strlen(aTitle) ) - { - strcat( lDialogString , " -title \""); - strcat( lDialogString , aTitle ) ; - strcat(lDialogString, "\" " ) ; - } - strcat(lDialogString, " -entrytext \"" ) ; - if ( aDefaultInput && strlen(aDefaultInput) ) - { - strcat( lDialogString , aDefaultInput ) ; - } - strcat(lDialogString, "\"" ) ; - strcat( lDialogString , ");echo $?$szAnswer"); - } - else if ( !gdialogPresent() && !xdialogPresent() && tkinter2Present( ) ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"python2-tkinter");return (char const *)1;} - strcpy( lDialogString , gPython2Name ) ; - if ( ! isTerminalRunning( ) && isDarwin( ) ) - { - strcat( lDialogString , " -i" ) ; /* for osx without console */ - } - - strcat( lDialogString , -" -S -c \"import Tkinter,tkSimpleDialog;root=Tkinter.Tk();root.withdraw();"); - - if ( isDarwin( ) ) - { - strcat( lDialogString , -"import os;os.system('''/usr/bin/osascript -e 'tell app \\\"Finder\\\" to set \ -frontmost of process \\\"Python\\\" to true' ''');"); - } - - strcat( lDialogString ,"res=tkSimpleDialog.askstring(" ) ; - if ( aTitle && strlen(aTitle) ) - { - strcat(lDialogString, "title='") ; - strcat(lDialogString, aTitle) ; - strcat(lDialogString, "',") ; - } - if ( aMessage && strlen(aMessage) ) - { - - strcat(lDialogString, "prompt='") ; - lpDialogString = lDialogString + strlen(lDialogString); - replaceSubStr( aMessage , "\n" , "\\n" , lpDialogString ) ; - strcat(lDialogString, "',") ; - } - if ( aDefaultInput ) - { - if ( strlen(aDefaultInput) ) - { - strcat(lDialogString, "initialvalue='") ; - strcat(lDialogString, aDefaultInput) ; - strcat(lDialogString, "',") ; - } - } - else - { - strcat(lDialogString, "show='*'") ; - } - strcat(lDialogString, ");\nif res is None :\n\tprint 0"); - strcat(lDialogString, "\nelse :\n\tprint '1'+res\n\"" ) ; - } - else if ( !gdialogPresent() && !xdialogPresent() && tkinter3Present( ) ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"python3-tkinter");return (char const *)1;} - strcpy( lDialogString , gPython3Name ) ; - strcat( lDialogString , - " -S -c \"import tkinter; from tkinter import simpledialog;root=tkinter.Tk();root.withdraw();"); - strcat( lDialogString ,"res=simpledialog.askstring(" ) ; - if ( aTitle && strlen(aTitle) ) - { - strcat(lDialogString, "title='") ; - strcat(lDialogString, aTitle) ; - strcat(lDialogString, "',") ; - } - if ( aMessage && strlen(aMessage) ) - { - - strcat(lDialogString, "prompt='") ; - lpDialogString = lDialogString + strlen(lDialogString); - replaceSubStr( aMessage , "\n" , "\\n" , lpDialogString ) ; - strcat(lDialogString, "',") ; - } - if ( aDefaultInput ) - { - if ( strlen(aDefaultInput) ) - { - strcat(lDialogString, "initialvalue='") ; - strcat(lDialogString, aDefaultInput) ; - strcat(lDialogString, "',") ; - } - } - else - { - strcat(lDialogString, "show='*'") ; - } - strcat(lDialogString, ");\nif res is None :\n\tprint(0)"); - strcat(lDialogString, "\nelse :\n\tprint('1'+res)\n\"" ) ; - } - else if ( gdialogPresent() || xdialogPresent() || dialogName() || whiptailPresent() ) - { - if ( gdialogPresent( ) ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"gdialog");return (char const *)1;} - lWasGraphicDialog = 1 ; - lWasGdialog = 1 ; - strcpy( lDialogString , "(gdialog " ) ; - } - else if ( xdialogPresent( ) ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"xdialog");return (char const *)1;} - lWasGraphicDialog = 1 ; - strcpy( lDialogString , "(Xdialog " ) ; - } - else if ( dialogName( ) ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"dialog");return (char const *)0;} - if ( isTerminalRunning( ) ) - { - strcpy( lDialogString , "(dialog " ) ; - } - else - { - lWasXterm = 1 ; - strcpy( lDialogString , terminalName() ) ; - strcat( lDialogString , "'(" ) ; - strcat( lDialogString , dialogName() ) ; - strcat( lDialogString , " " ) ; - } - } - else if ( isTerminalRunning( ) ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"whiptail");return (char const *)0;} - strcpy( lDialogString , "(whiptail " ) ; - } - else - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"whiptail");return (char const *)0;} - lWasXterm = 1 ; - strcpy( lDialogString , terminalName() ) ; - strcat( lDialogString , "'(whiptail " ) ; - } - - if ( aTitle && strlen(aTitle) ) - { - strcat(lDialogString, "--title \"") ; - strcat(lDialogString, aTitle) ; - strcat(lDialogString, "\" ") ; - } - - if ( !xdialogPresent() && !gdialogPresent() ) - { - strcat(lDialogString, "--backtitle \"") ; - strcat(lDialogString, "tab: move focus") ; - if ( ! aDefaultInput && !lWasGdialog ) - { - strcat(lDialogString, " (sometimes nothing, no blink nor star, is shown in text field)") ; - } - strcat(lDialogString, "\" ") ; - } - - if ( aDefaultInput || lWasGdialog ) - { - strcat( lDialogString , "--inputbox" ) ; - } - else - { - if ( !lWasGraphicDialog && dialogName() && isDialogVersionBetter09b() ) - { - strcat( lDialogString , "--insecure " ) ; - } - strcat( lDialogString , "--passwordbox" ) ; - } - strcat( lDialogString , " \"" ) ; - if ( aMessage && strlen(aMessage) ) - { - strcat(lDialogString, aMessage) ; - } - strcat(lDialogString,"\" 10 60 ") ; - if ( aDefaultInput && strlen(aDefaultInput) ) - { - strcat(lDialogString, "\"") ; - strcat(lDialogString, aDefaultInput) ; - strcat(lDialogString, "\" ") ; - } - if ( lWasGraphicDialog ) - { - strcat(lDialogString,") 2>/tmp/tinyfd.txt;\ - if [ $? = 0 ];then tinyfdBool=1;else tinyfdBool=0;fi;\ - tinyfdRes=$(cat /tmp/tinyfd.txt);echo $tinyfdBool$tinyfdRes") ; - } - else - { - strcat(lDialogString,">/dev/tty ) 2>/tmp/tinyfd.txt;\ - if [ $? = 0 ];then tinyfdBool=1;else tinyfdBool=0;fi;\ - tinyfdRes=$(cat /tmp/tinyfd.txt);echo $tinyfdBool$tinyfdRes") ; - - if ( lWasXterm ) - { - strcat(lDialogString," >/tmp/tinyfd0.txt';cat /tmp/tinyfd0.txt"); - } - else - { - strcat(lDialogString, "; clear >/dev/tty") ; - } - } - } - else if ( ! isTerminalRunning( ) && terminalName() ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"basicinput");return (char const *)0;} - lWasBasicXterm = 1 ; - strcpy( lDialogString , terminalName() ) ; - strcat( lDialogString , "'" ) ; - if ( !gWarningDisplayed && !tinyfd_forceConsole) - { - tinyfd_messageBox(gTitle,tinyfd_needs,"ok","warning",0); - gWarningDisplayed = 1 ; - } - if ( aTitle && strlen(aTitle) && !tinyfd_forceConsole) - { - strcat( lDialogString , "echo \"" ) ; - strcat( lDialogString, aTitle) ; - strcat( lDialogString , "\";echo;" ) ; - } - - strcat( lDialogString , "echo \"" ) ; - if ( aMessage && strlen(aMessage) ) - { - strcat( lDialogString, aMessage) ; - } - strcat( lDialogString , "\";read " ) ; - if ( ! aDefaultInput ) - { - strcat( lDialogString , "-s " ) ; - } - strcat( lDialogString , "-p \"" ) ; - strcat( lDialogString , "(esc+enter to cancel): \" ANSWER " ) ; - strcat( lDialogString , ";echo 1$ANSWER >/tmp/tinyfd.txt';" ) ; - strcat( lDialogString , "cat -v /tmp/tinyfd.txt"); - } - else if ( !gWarningDisplayed && ! isTerminalRunning( ) && ! terminalName() ) { - tinyfd_messageBox(gTitle,tinyfd_needs,"ok","warning",0); - gWarningDisplayed = 1 ; - return NULL; - } - else - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"basicinput");return (char const *)0;} - if ( !gWarningDisplayed && !tinyfd_forceConsole) - { - tinyfd_messageBox(gTitle,tinyfd_needs,"ok","warning",0); - gWarningDisplayed = 1 ; - } - if ( aTitle && strlen(aTitle) ) - { - printf("\n%s\n", aTitle); - } - if ( aMessage && strlen(aMessage) ) - { - printf("\n%s\n",aMessage); - } - printf("(esc+enter to cancel): "); fflush(stdout); - if ( ! aDefaultInput ) - { - tcgetattr(STDIN_FILENO, & oldt) ; - newt = oldt ; - newt.c_lflag &= ~ECHO ; - tcsetattr(STDIN_FILENO, TCSANOW, & newt); - } - - lEOF = fgets(lBuff, MAX_PATH_OR_CMD, stdin); - /* printf("lbuff<%c><%d>\n",lBuff[0],lBuff[0]); */ - if ( ! lEOF || (lBuff[0] == '\0') ) - { - free(lDialogString); - return NULL; - } - - if ( lBuff[0] == '\n' ) - { - lEOF = fgets(lBuff, MAX_PATH_OR_CMD, stdin); - /* printf("lbuff<%c><%d>\n",lBuff[0],lBuff[0]); */ - if ( ! lEOF || (lBuff[0] == '\0') ) - { - free(lDialogString); - return NULL; - } - } - - if ( ! aDefaultInput ) - { - tcsetattr(STDIN_FILENO, TCSANOW, & oldt); - printf("\n"); - } - printf("\n"); - if ( strchr(lBuff,27) ) - { - free(lDialogString); - return NULL ; - } - if ( lBuff[strlen( lBuff ) -1] == '\n' ) - { - lBuff[strlen( lBuff ) -1] = '\0' ; - } - free(lDialogString); - return lBuff ; - } - - if (tinyfd_verbose) printf( "lDialogString: %s\n" , lDialogString ) ; - lIn = popen( lDialogString , "r" ); - if ( ! lIn ) - { - if ( fileExists("/tmp/tinyfd.txt") ) - { - wipefile("/tmp/tinyfd.txt"); - remove("/tmp/tinyfd.txt"); - } - if ( fileExists("/tmp/tinyfd0.txt") ) - { - wipefile("/tmp/tinyfd0.txt"); - remove("/tmp/tinyfd0.txt"); - } - free(lDialogString); - return NULL ; - } - while ( fgets( lBuff , sizeof( lBuff ) , lIn ) != NULL ) - {} - - pclose( lIn ) ; - - if ( fileExists("/tmp/tinyfd.txt") ) - { - wipefile("/tmp/tinyfd.txt"); - remove("/tmp/tinyfd.txt"); - } - if ( fileExists("/tmp/tinyfd0.txt") ) - { - wipefile("/tmp/tinyfd0.txt"); - remove("/tmp/tinyfd0.txt"); - } - - /* printf( "len Buff: %lu\n" , strlen(lBuff) ) ; */ - /* printf( "lBuff0: %s\n" , lBuff ) ; */ - if ( lBuff[strlen( lBuff ) -1] == '\n' ) - { - lBuff[strlen( lBuff ) -1] = '\0' ; - } - /* printf( "lBuff1: %s len: %lu \n" , lBuff , strlen(lBuff) ) ; */ - if ( lWasBasicXterm ) - { - if ( strstr(lBuff,"^[") ) /* esc was pressed */ - { - free(lDialogString); - return NULL ; - } - } - - lResult = strncmp( lBuff , "1" , 1) ? 0 : 1 ; - /* printf( "lResult: %d \n" , lResult ) ; */ - if ( ! lResult ) - { - free(lDialogString); - return NULL ; - } - /* printf( "lBuff+1: %s\n" , lBuff+1 ) ; */ - free(lDialogString); - - return lBuff+1 ; -} - - -char const * tinyfd_saveFileDialog( - char const * const aTitle , /* NULL or "" */ - char const * const aDefaultPathAndFile , /* NULL or "" */ - int const aNumOfFilterPatterns , /* 0 */ - char const * const * const aFilterPatterns , /* NULL or {"*.jpg","*.png"} */ - char const * const aSingleFilterDescription ) /* NULL or "image files" */ -{ - - static char lBuff [MAX_PATH_OR_CMD] ; - char lDialogString [MAX_PATH_OR_CMD] ; - char lString [MAX_PATH_OR_CMD] ; - int i ; - int lWasGraphicDialog = 0 ; - int lWasXterm = 0 ; - char const * p ; - FILE * lIn ; - lBuff[0]='\0'; - - if ( osascriptPresent( ) ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"applescript");return (char const *)1;} - strcpy( lDialogString , "osascript "); - if ( ! osx9orBetter() ) strcat( lDialogString , " -e 'tell application \"Finder\"' -e 'Activate'"); - strcat( lDialogString , " -e 'try' -e 'POSIX path of ( choose file name " ); - if ( aTitle && strlen(aTitle) ) - { - strcat(lDialogString, "with prompt \"") ; - strcat(lDialogString, aTitle) ; - strcat(lDialogString, "\" ") ; - } - getPathWithoutFinalSlash( lString , aDefaultPathAndFile ) ; - if ( strlen(lString) ) - { - strcat(lDialogString, "default location \"") ; - strcat(lDialogString, lString ) ; - strcat(lDialogString , "\" " ) ; - } - getLastName( lString , aDefaultPathAndFile ) ; - if ( strlen(lString) ) - { - strcat(lDialogString, "default name \"") ; - strcat(lDialogString, lString ) ; - strcat(lDialogString , "\" " ) ; - } - strcat( lDialogString , ")' " ) ; - strcat(lDialogString, "-e 'on error number -128' " ) ; - strcat(lDialogString, "-e 'end try'") ; - if ( ! osx9orBetter() ) strcat( lDialogString, " -e 'end tell'") ; - } - else if ( kdialogPresent() ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"kdialog");return (char const *)1;} - - strcpy( lDialogString , "kdialog" ) ; - if ( kdialogPresent() == 2 ) - { - strcat(lDialogString, " --attach=$(xprop -root 32x '\t$0' _NET_ACTIVE_WINDOW | cut -f 2)"); /* contribution: Paul Rouget */ - } - strcat( lDialogString , " --getsavefilename " ) ; - - if ( aDefaultPathAndFile && strlen(aDefaultPathAndFile) ) - { - if ( aDefaultPathAndFile[0] != '/' ) - { - strcat(lDialogString, "$PWD/") ; - } - strcat(lDialogString, "\"") ; - strcat(lDialogString, aDefaultPathAndFile ) ; - strcat(lDialogString , "\"" ) ; - } - else - { - strcat(lDialogString, "$PWD/") ; - } - - if ( aNumOfFilterPatterns > 0 ) - { - strcat(lDialogString , " \"" ) ; - for ( i = 0 ; i < aNumOfFilterPatterns ; i ++ ) - { - strcat( lDialogString , aFilterPatterns [i] ) ; - strcat( lDialogString , " " ) ; - } - if ( aSingleFilterDescription && strlen(aSingleFilterDescription) ) - { - strcat( lDialogString , " | " ) ; - strcat( lDialogString , aSingleFilterDescription ) ; - } - strcat( lDialogString , "\"" ) ; - } - if ( aTitle && strlen(aTitle) ) - { - strcat(lDialogString, " --title \"") ; - strcat(lDialogString, aTitle) ; - strcat(lDialogString, "\"") ; - } - } - else if ( zenityPresent() || matedialogPresent() || shellementaryPresent() || qarmaPresent() ) - { - if ( zenityPresent() ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"zenity");return (char const *)1;} - strcpy( lDialogString , "zenity" ) ; - if ( (zenity3Present() >= 4) && !getenv("SSH_TTY") ) - { - strcat( lDialogString, " --attach=$(sleep .01;xprop -root 32x '\t$0' _NET_ACTIVE_WINDOW | cut -f 2)"); /* contribution: Paul Rouget */ - } - } - else if ( matedialogPresent() ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"matedialog");return (char const *)1;} - strcpy( lDialogString , "matedialog" ) ; - } - else if ( shellementaryPresent() ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"shellementary");return (char const *)1;} - strcpy( lDialogString , "shellementary" ) ; - } - else - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"qarma");return (char const *)1;} - strcpy( lDialogString , "qarma" ) ; - if ( !getenv("SSH_TTY") ) - { - strcat(lDialogString, " --attach=$(xprop -root 32x '\t$0' _NET_ACTIVE_WINDOW | cut -f 2)"); /* contribution: Paul Rouget */ - } - } - strcat(lDialogString, " --file-selection --save --confirm-overwrite" ) ; - - if ( aTitle && strlen(aTitle) ) - { - strcat(lDialogString, " --title=\"") ; - strcat(lDialogString, aTitle) ; - strcat(lDialogString, "\"") ; - } - if ( aDefaultPathAndFile && strlen(aDefaultPathAndFile) ) - { - strcat(lDialogString, " --filename=\"") ; - strcat(lDialogString, aDefaultPathAndFile) ; - strcat(lDialogString, "\"") ; - } - if ( aNumOfFilterPatterns > 0 ) - { - strcat( lDialogString , " --file-filter='" ) ; - if ( aSingleFilterDescription && strlen(aSingleFilterDescription) ) - { - strcat( lDialogString , aSingleFilterDescription ) ; - strcat( lDialogString , " | " ) ; - } - for ( i = 0 ; i < aNumOfFilterPatterns ; i ++ ) - { - strcat( lDialogString , aFilterPatterns [i] ) ; - strcat( lDialogString , " " ) ; - } - strcat( lDialogString , "' --file-filter='All files | *'" ) ; - } - } - else if ( !xdialogPresent() && tkinter2Present( ) ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"python2-tkinter");return (char const *)1;} - strcpy( lDialogString , gPython2Name ) ; - if ( ! isTerminalRunning( ) && isDarwin( )) - { - strcat( lDialogString , " -i" ) ; /* for osx without console */ - } - strcat( lDialogString , -" -S -c \"import Tkinter,tkFileDialog;root=Tkinter.Tk();root.withdraw();"); - - if ( isDarwin( ) ) - { - strcat( lDialogString , -"import os;os.system('''/usr/bin/osascript -e 'tell app \\\"Finder\\\" to set\ - frontmost of process \\\"Python\\\" to true' ''');"); - } - - strcat( lDialogString , "print tkFileDialog.asksaveasfilename("); - if ( aTitle && strlen(aTitle) ) - { - strcat(lDialogString, "title='") ; - strcat(lDialogString, aTitle) ; - strcat(lDialogString, "',") ; - } - if ( aDefaultPathAndFile && strlen(aDefaultPathAndFile) ) - { - getPathWithoutFinalSlash( lString , aDefaultPathAndFile ) ; - if ( strlen(lString) ) - { - strcat(lDialogString, "initialdir='") ; - strcat(lDialogString, lString ) ; - strcat(lDialogString , "'," ) ; - } - getLastName( lString , aDefaultPathAndFile ) ; - if ( strlen(lString) ) - { - strcat(lDialogString, "initialfile='") ; - strcat(lDialogString, lString ) ; - strcat(lDialogString , "'," ) ; - } - } - if ( ( aNumOfFilterPatterns > 1 ) - || ( (aNumOfFilterPatterns == 1) /* test because poor osx behaviour */ - && ( aFilterPatterns[0][strlen(aFilterPatterns[0])-1] != '*' ) ) ) - { - strcat(lDialogString , "filetypes=(" ) ; - strcat( lDialogString , "('" ) ; - if ( aSingleFilterDescription && strlen(aSingleFilterDescription) ) - { - strcat( lDialogString , aSingleFilterDescription ) ; - } - strcat( lDialogString , "',(" ) ; - for ( i = 0 ; i < aNumOfFilterPatterns ; i ++ ) - { - strcat( lDialogString , "'" ) ; - strcat( lDialogString , aFilterPatterns [i] ) ; - strcat( lDialogString , "'," ) ; - } - strcat( lDialogString , "))," ) ; - strcat( lDialogString , "('All files','*'))" ) ; - } - strcat( lDialogString , ")\"" ) ; - } - else if ( !xdialogPresent() && tkinter3Present( ) ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"python3-tkinter");return (char const *)1;} - strcpy( lDialogString , gPython3Name ) ; - strcat( lDialogString , - " -S -c \"import tkinter;from tkinter import filedialog;root=tkinter.Tk();root.withdraw();"); - strcat( lDialogString , "print( filedialog.asksaveasfilename("); - if ( aTitle && strlen(aTitle) ) - { - strcat(lDialogString, "title='") ; - strcat(lDialogString, aTitle) ; - strcat(lDialogString, "',") ; - } - if ( aDefaultPathAndFile && strlen(aDefaultPathAndFile) ) - { - getPathWithoutFinalSlash( lString , aDefaultPathAndFile ) ; - if ( strlen(lString) ) - { - strcat(lDialogString, "initialdir='") ; - strcat(lDialogString, lString ) ; - strcat(lDialogString , "'," ) ; - } - getLastName( lString , aDefaultPathAndFile ) ; - if ( strlen(lString) ) - { - strcat(lDialogString, "initialfile='") ; - strcat(lDialogString, lString ) ; - strcat(lDialogString , "'," ) ; - } - } - if ( ( aNumOfFilterPatterns > 1 ) - || ( (aNumOfFilterPatterns == 1) /* test because poor osx behaviour */ - && ( aFilterPatterns[0][strlen(aFilterPatterns[0])-1] != '*' ) ) ) - { - strcat(lDialogString , "filetypes=(" ) ; - strcat( lDialogString , "('" ) ; - if ( aSingleFilterDescription && strlen(aSingleFilterDescription) ) - { - strcat( lDialogString , aSingleFilterDescription ) ; - } - strcat( lDialogString , "',(" ) ; - for ( i = 0 ; i < aNumOfFilterPatterns ; i ++ ) - { - strcat( lDialogString , "'" ) ; - strcat( lDialogString , aFilterPatterns [i] ) ; - strcat( lDialogString , "'," ) ; - } - strcat( lDialogString , "))," ) ; - strcat( lDialogString , "('All files','*'))" ) ; - } - strcat( lDialogString , "))\"" ) ; - } - else if ( xdialogPresent() || dialogName() ) - { - if ( xdialogPresent( ) ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"xdialog");return (char const *)1;} - lWasGraphicDialog = 1 ; - strcpy( lDialogString , "(Xdialog " ) ; - } - else if ( isTerminalRunning( ) ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"dialog");return (char const *)0;} - strcpy( lDialogString , "(dialog " ) ; - } - else - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"dialog");return (char const *)0;} - lWasXterm = 1 ; - strcpy( lDialogString , terminalName() ) ; - strcat( lDialogString , "'(" ) ; - strcat( lDialogString , dialogName() ) ; - strcat( lDialogString , " " ) ; - } - - if ( aTitle && strlen(aTitle) ) - { - strcat(lDialogString, "--title \"") ; - strcat(lDialogString, aTitle) ; - strcat(lDialogString, "\" ") ; - } - - if ( !xdialogPresent() && !gdialogPresent() ) - { - strcat(lDialogString, "--backtitle \"") ; - strcat(lDialogString, - "tab: focus | /: populate | spacebar: fill text field | ok: TEXT FIELD ONLY") ; - strcat(lDialogString, "\" ") ; - } - - strcat( lDialogString , "--fselect \"" ) ; - if ( aDefaultPathAndFile && strlen(aDefaultPathAndFile) ) - { - if ( ! strchr(aDefaultPathAndFile, '/') ) - { - strcat(lDialogString, "./") ; - } - strcat(lDialogString, aDefaultPathAndFile) ; - } - else if ( ! isTerminalRunning( ) && !lWasGraphicDialog ) - { - strcat(lDialogString, getenv("HOME")) ; - strcat(lDialogString, "/") ; - } - else - { - strcat(lDialogString, "./") ; - } - - if ( lWasGraphicDialog ) - { - strcat(lDialogString, "\" 0 60 ) 2>&1 ") ; - } - else - { - strcat(lDialogString, "\" 0 60 >/dev/tty) ") ; - if ( lWasXterm ) - { - strcat( lDialogString , - "2>/tmp/tinyfd.txt';cat /tmp/tinyfd.txt;rm /tmp/tinyfd.txt"); - } - else - { - strcat(lDialogString, "2>&1 ; clear >/dev/tty") ; - } - } - } - else - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){return tinyfd_inputBox(aTitle,NULL,NULL);} - p = tinyfd_inputBox( aTitle , "Save file" , "" ) ; - getPathWithoutFinalSlash( lString , p ) ; - if ( strlen( lString ) && ! dirExists( lString ) ) - { - return NULL ; - } - getLastName(lString,p); - if ( ! strlen(lString) ) - { - return NULL; - } - return p ; - } - - if (tinyfd_verbose) printf( "lDialogString: %s\n" , lDialogString ) ; - if ( ! ( lIn = popen( lDialogString , "r" ) ) ) - { - return NULL ; - } - while ( fgets( lBuff , sizeof( lBuff ) , lIn ) != NULL ) - {} - pclose( lIn ) ; - if ( lBuff[strlen( lBuff ) -1] == '\n' ) - { - lBuff[strlen( lBuff ) -1] = '\0' ; - } - /* printf( "lBuff: %s\n" , lBuff ) ; */ - if ( ! strlen(lBuff) ) - { - return NULL; - } - getPathWithoutFinalSlash( lString , lBuff ) ; - if ( strlen( lString ) && ! dirExists( lString ) ) - { - return NULL ; - } - getLastName(lString,lBuff); - if ( ! filenameValid(lString) ) - { - return NULL; - } - return lBuff ; -} - - -/* in case of multiple files, the separator is | */ -char const * tinyfd_openFileDialog( - char const * const aTitle , /* NULL or "" */ - char const * const aDefaultPathAndFile , /* NULL or "" */ - int const aNumOfFilterPatterns , /* 0 */ - char const * const * const aFilterPatterns , /* NULL or {"*.jpg","*.png"} */ - char const * const aSingleFilterDescription , /* NULL or "image files" */ - int const aAllowMultipleSelects ) /* 0 or 1 */ -{ - static char lBuff [MAX_MULTIPLE_FILES*MAX_PATH_OR_CMD] ; - char lDialogString [MAX_PATH_OR_CMD] ; - char lString [MAX_PATH_OR_CMD] ; - int i ; - FILE * lIn ; - char * p ; - char const * p2 ; - int lWasKdialog = 0 ; - int lWasGraphicDialog = 0 ; - int lWasXterm = 0 ; - lBuff[0]='\0'; - - if ( osascriptPresent( ) ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"applescript");return (char const *)1;} - strcpy( lDialogString , "osascript "); - if ( ! osx9orBetter() ) strcat( lDialogString , " -e 'tell application \"System Events\"' -e 'Activate'"); - strcat( lDialogString , " -e 'try' -e '" ); - if ( ! aAllowMultipleSelects ) - { - - - strcat( lDialogString , "POSIX path of ( " ); - } - else - { - strcat( lDialogString , "set mylist to " ); - } - strcat( lDialogString , "choose file " ); - if ( aTitle && strlen(aTitle) ) - { - strcat(lDialogString, "with prompt \"") ; - strcat(lDialogString, aTitle) ; - strcat(lDialogString, "\" ") ; - } - getPathWithoutFinalSlash( lString , aDefaultPathAndFile ) ; - if ( strlen(lString) ) - { - strcat(lDialogString, "default location \"") ; - strcat(lDialogString, lString ) ; - strcat(lDialogString , "\" " ) ; - } - if ( aNumOfFilterPatterns > 0 ) - { - strcat(lDialogString , "of type {\"" ); - strcat( lDialogString , aFilterPatterns [0] + 2 ) ; - strcat( lDialogString , "\"" ) ; - for ( i = 1 ; i < aNumOfFilterPatterns ; i ++ ) - { - strcat( lDialogString , ",\"" ) ; - strcat( lDialogString , aFilterPatterns [i] + 2) ; - strcat( lDialogString , "\"" ) ; - } - strcat( lDialogString , "} " ) ; - } - if ( aAllowMultipleSelects ) - { - strcat( lDialogString , "multiple selections allowed true ' " ) ; - strcat( lDialogString , - "-e 'set mystring to POSIX path of item 1 of mylist' " ); - strcat( lDialogString , - "-e 'repeat with i from 2 to the count of mylist' " ); - strcat( lDialogString , "-e 'set mystring to mystring & \"|\"' " ); - strcat( lDialogString , - "-e 'set mystring to mystring & POSIX path of item i of mylist' " ); - strcat( lDialogString , "-e 'end repeat' " ); - strcat( lDialogString , "-e 'mystring' " ); - } - else - { - strcat( lDialogString , ")' " ) ; - } - strcat(lDialogString, "-e 'on error number -128' " ) ; - strcat(lDialogString, "-e 'end try'") ; - if ( ! osx9orBetter() ) strcat( lDialogString, " -e 'end tell'") ; - } - else if ( kdialogPresent() ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"kdialog");return (char const *)1;} - lWasKdialog = 1 ; - - strcpy( lDialogString , "kdialog" ) ; - if ( kdialogPresent() == 2 ) - { - strcat(lDialogString, " --attach=$(xprop -root 32x '\t$0' _NET_ACTIVE_WINDOW | cut -f 2)"); /* contribution: Paul Rouget */ - } - strcat( lDialogString , " --getopenfilename " ) ; - - if ( aDefaultPathAndFile && strlen(aDefaultPathAndFile) ) - { - if ( aDefaultPathAndFile[0] != '/' ) - { - strcat(lDialogString, "$PWD/") ; - } - strcat(lDialogString, "\"") ; - strcat(lDialogString, aDefaultPathAndFile ) ; - strcat(lDialogString , "\"" ) ; - } - else - { - strcat(lDialogString, "$PWD/") ; - } - - if ( aNumOfFilterPatterns > 0 ) - { - strcat(lDialogString , " \"" ) ; - for ( i = 0 ; i < aNumOfFilterPatterns ; i ++ ) - { - strcat( lDialogString , aFilterPatterns [i] ) ; - strcat( lDialogString , " " ) ; - } - if ( aSingleFilterDescription && strlen(aSingleFilterDescription) ) - { - strcat( lDialogString , " | " ) ; - strcat( lDialogString , aSingleFilterDescription ) ; - } - strcat( lDialogString , "\"" ) ; - } - if ( aAllowMultipleSelects ) - { - strcat( lDialogString , " --multiple --separate-output" ) ; - } - if ( aTitle && strlen(aTitle) ) - { - strcat(lDialogString, " --title \"") ; - strcat(lDialogString, aTitle) ; - strcat(lDialogString, "\"") ; - } - } - else if ( zenityPresent() || matedialogPresent() || shellementaryPresent() || qarmaPresent() ) - { - if ( zenityPresent() ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"zenity");return (char const *)1;} - strcpy( lDialogString , "zenity" ) ; - if ( (zenity3Present() >= 4) && !getenv("SSH_TTY") ) - { - strcat( lDialogString, " --attach=$(sleep .01;xprop -root 32x '\t$0' _NET_ACTIVE_WINDOW | cut -f 2)"); /* contribution: Paul Rouget */ - } - } - else if ( matedialogPresent() ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"matedialog");return (char const *)1;} - strcpy( lDialogString , "matedialog" ) ; - } - else if ( shellementaryPresent() ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"shellementary");return (char const *)1;} - strcpy( lDialogString , "shellementary" ) ; - } - else - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"qarma");return (char const *)1;} - strcpy( lDialogString , "qarma" ) ; - if ( !getenv("SSH_TTY") ) - { - strcat(lDialogString, " --attach=$(xprop -root 32x '\t$0' _NET_ACTIVE_WINDOW | cut -f 2)"); /* contribution: Paul Rouget */ - } - } - strcat( lDialogString , " --file-selection" ) ; - - if ( aAllowMultipleSelects ) - { - strcat( lDialogString , " --multiple" ) ; - } - if ( aTitle && strlen(aTitle) ) - { - strcat(lDialogString, " --title=\"") ; - strcat(lDialogString, aTitle) ; - strcat(lDialogString, "\"") ; - } - if ( aDefaultPathAndFile && strlen(aDefaultPathAndFile) ) - { - strcat(lDialogString, " --filename=\"") ; - strcat(lDialogString, aDefaultPathAndFile) ; - strcat(lDialogString, "\"") ; - } - if ( aNumOfFilterPatterns > 0 ) - { - strcat( lDialogString , " --file-filter='" ) ; - if ( aSingleFilterDescription && strlen(aSingleFilterDescription) ) - { - strcat( lDialogString , aSingleFilterDescription ) ; - strcat( lDialogString , " | " ) ; - } - for ( i = 0 ; i < aNumOfFilterPatterns ; i ++ ) - { - strcat( lDialogString , aFilterPatterns [i] ) ; - strcat( lDialogString , " " ) ; - } - strcat( lDialogString , "' --file-filter='All files | *'" ) ; - } - } - else if ( tkinter2Present( ) ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"python2-tkinter");return (char const *)1;} - strcpy( lDialogString , gPython2Name ) ; - if ( ! isTerminalRunning( ) && isDarwin( ) ) - { - strcat( lDialogString , " -i" ) ; /* for osx without console */ - } - strcat( lDialogString , -" -S -c \"import Tkinter,tkFileDialog;root=Tkinter.Tk();root.withdraw();"); - - if ( isDarwin( ) ) - { - strcat( lDialogString , -"import os;os.system('''/usr/bin/osascript -e 'tell app \\\"Finder\\\" to set \ -frontmost of process \\\"Python\\\" to true' ''');"); - } - strcat( lDialogString , "lFiles=tkFileDialog.askopenfilename("); - if ( aAllowMultipleSelects ) - { - strcat( lDialogString , "multiple=1," ) ; - } - if ( aTitle && strlen(aTitle) ) - { - strcat(lDialogString, "title='") ; - strcat(lDialogString, aTitle) ; - strcat(lDialogString, "',") ; - } - if ( aDefaultPathAndFile && strlen(aDefaultPathAndFile) ) - { - getPathWithoutFinalSlash( lString , aDefaultPathAndFile ) ; - if ( strlen(lString) ) - { - strcat(lDialogString, "initialdir='") ; - strcat(lDialogString, lString ) ; - strcat(lDialogString , "'," ) ; - } - getLastName( lString , aDefaultPathAndFile ) ; - if ( strlen(lString) ) - { - strcat(lDialogString, "initialfile='") ; - strcat(lDialogString, lString ) ; - strcat(lDialogString , "'," ) ; - } - } - if ( ( aNumOfFilterPatterns > 1 ) - || ( ( aNumOfFilterPatterns == 1 ) /*test because poor osx behaviour*/ - && ( aFilterPatterns[0][strlen(aFilterPatterns[0])-1] != '*' ) ) ) - { - strcat(lDialogString , "filetypes=(" ) ; - strcat( lDialogString , "('" ) ; - if ( aSingleFilterDescription && strlen(aSingleFilterDescription) ) - { - strcat( lDialogString , aSingleFilterDescription ) ; - } - strcat( lDialogString , "',(" ) ; - for ( i = 0 ; i < aNumOfFilterPatterns ; i ++ ) - { - strcat( lDialogString , "'" ) ; - strcat( lDialogString , aFilterPatterns [i] ) ; - strcat( lDialogString , "'," ) ; - } - strcat( lDialogString , "))," ) ; - strcat( lDialogString , "('All files','*'))" ) ; - } - strcat( lDialogString , ");\ -\nif not isinstance(lFiles, tuple):\n\tprint lFiles\nelse:\ -\n\tlFilesString=''\n\tfor lFile in lFiles:\n\t\tlFilesString+=str(lFile)+'|'\ -\n\tprint lFilesString[:-1]\n\"" ) ; - } - else if ( tkinter3Present( ) ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"python3-tkinter");return (char const *)1;} - strcpy( lDialogString , gPython3Name ) ; - strcat( lDialogString , - " -S -c \"import tkinter;from tkinter import filedialog;root=tkinter.Tk();root.withdraw();"); - strcat( lDialogString , "lFiles=filedialog.askopenfilename("); - if ( aAllowMultipleSelects ) - { - strcat( lDialogString , "multiple=1," ) ; - } - if ( aTitle && strlen(aTitle) ) - { - strcat(lDialogString, "title='") ; - strcat(lDialogString, aTitle) ; - strcat(lDialogString, "',") ; - } - if ( aDefaultPathAndFile && strlen(aDefaultPathAndFile) ) - { - getPathWithoutFinalSlash( lString , aDefaultPathAndFile ) ; - if ( strlen(lString) ) - { - strcat(lDialogString, "initialdir='") ; - strcat(lDialogString, lString ) ; - strcat(lDialogString , "'," ) ; - } - getLastName( lString , aDefaultPathAndFile ) ; - if ( strlen(lString) ) - { - strcat(lDialogString, "initialfile='") ; - strcat(lDialogString, lString ) ; - strcat(lDialogString , "'," ) ; - } - } - if ( ( aNumOfFilterPatterns > 1 ) - || ( ( aNumOfFilterPatterns == 1 ) /*test because poor osx behaviour*/ - && ( aFilterPatterns[0][strlen(aFilterPatterns[0])-1] != '*' ) ) ) - { - strcat(lDialogString , "filetypes=(" ) ; - strcat( lDialogString , "('" ) ; - if ( aSingleFilterDescription && strlen(aSingleFilterDescription) ) - { - strcat( lDialogString , aSingleFilterDescription ) ; - } - strcat( lDialogString , "',(" ) ; - for ( i = 0 ; i < aNumOfFilterPatterns ; i ++ ) - { - strcat( lDialogString , "'" ) ; - strcat( lDialogString , aFilterPatterns [i] ) ; - strcat( lDialogString , "'," ) ; - } - strcat( lDialogString , "))," ) ; - strcat( lDialogString , "('All files','*'))" ) ; - } - strcat( lDialogString , ");\ -\nif not isinstance(lFiles, tuple):\n\tprint(lFiles)\nelse:\ -\n\tlFilesString=''\n\tfor lFile in lFiles:\n\t\tlFilesString+=str(lFile)+'|'\ -\n\tprint(lFilesString[:-1])\n\"" ) ; - } - else if ( xdialogPresent() || dialogName() ) - { - if ( xdialogPresent( ) ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"xdialog");return (char const *)1;} - lWasGraphicDialog = 1 ; - strcpy( lDialogString , "(Xdialog " ) ; - } - else if ( isTerminalRunning( ) ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"dialog");return (char const *)0;} - strcpy( lDialogString , "(dialog " ) ; - } - else - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"dialog");return (char const *)0;} - lWasXterm = 1 ; - strcpy( lDialogString , terminalName() ) ; - strcat( lDialogString , "'(" ) ; - strcat( lDialogString , dialogName() ) ; - strcat( lDialogString , " " ) ; - } - - if ( aTitle && strlen(aTitle) ) - { - strcat(lDialogString, "--title \"") ; - strcat(lDialogString, aTitle) ; - strcat(lDialogString, "\" ") ; - } - - if ( !xdialogPresent() && !gdialogPresent() ) - { - strcat(lDialogString, "--backtitle \"") ; - strcat(lDialogString, - "tab: focus | /: populate | spacebar: fill text field | ok: TEXT FIELD ONLY") ; - strcat(lDialogString, "\" ") ; - } - - strcat( lDialogString , "--fselect \"" ) ; - if ( aDefaultPathAndFile && strlen(aDefaultPathAndFile) ) - { - if ( ! strchr(aDefaultPathAndFile, '/') ) - { - strcat(lDialogString, "./") ; - } - strcat(lDialogString, aDefaultPathAndFile) ; - } - else if ( ! isTerminalRunning( ) && !lWasGraphicDialog ) - { - strcat(lDialogString, getenv("HOME")) ; - strcat(lDialogString, "/"); - } - else - { - strcat(lDialogString, "./") ; - } - - if ( lWasGraphicDialog ) - { - strcat(lDialogString, "\" 0 60 ) 2>&1 ") ; - } - else - { - strcat(lDialogString, "\" 0 60 >/dev/tty) ") ; - if ( lWasXterm ) - { - strcat( lDialogString , - "2>/tmp/tinyfd.txt';cat /tmp/tinyfd.txt;rm /tmp/tinyfd.txt"); - } - else - { - strcat(lDialogString, "2>&1 ; clear >/dev/tty") ; - } - } - } - else - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){return tinyfd_inputBox(aTitle,NULL,NULL);} - p2 = tinyfd_inputBox(aTitle, "Open file",""); - if ( ! fileExists(p2) ) - { - return NULL ; - } - return p2 ; - } - - if (tinyfd_verbose) printf( "lDialogString: %s\n" , lDialogString ) ; - if ( ! ( lIn = popen( lDialogString , "r" ) ) ) - { - return NULL ; - } - lBuff[0]='\0'; - p=lBuff; - while ( fgets( p , sizeof( lBuff ) , lIn ) != NULL ) - { - p += strlen( p ); - } - pclose( lIn ) ; - if ( lBuff[strlen( lBuff ) -1] == '\n' ) - { - lBuff[strlen( lBuff ) -1] = '\0' ; - } - /* printf( "lBuff: %s\n" , lBuff ) ; */ - if ( lWasKdialog && aAllowMultipleSelects ) - { - p = lBuff ; - while ( ( p = strchr( p , '\n' ) ) ) - * p = '|' ; - } - /* printf( "lBuff2: %s\n" , lBuff ) ; */ - if ( ! strlen( lBuff ) ) - { - return NULL; - } - if ( aAllowMultipleSelects && strchr(lBuff, '|') ) - { - p2 = ensureFilesExist( lBuff , lBuff ) ; - } - else if ( fileExists(lBuff) ) - { - p2 = lBuff ; - } - else - { - return NULL ; - } - /* printf( "lBuff3: %s\n" , p2 ) ; */ - - return p2 ; -} - - -char const * tinyfd_selectFolderDialog( - char const * const aTitle , /* "" */ - char const * const aDefaultPath ) /* "" */ -{ - static char lBuff [MAX_PATH_OR_CMD] ; - char lDialogString [MAX_PATH_OR_CMD] ; - FILE * lIn ; - char const * p ; - int lWasGraphicDialog = 0 ; - int lWasXterm = 0 ; - lBuff[0]='\0'; - - if ( osascriptPresent( )) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"applescript");return (char const *)1;} - strcpy( lDialogString , "osascript "); - if ( ! osx9orBetter() ) strcat( lDialogString , " -e 'tell application \"System Events\"' -e 'Activate'"); - strcat( lDialogString , " -e 'try' -e 'POSIX path of ( choose folder "); - if ( aTitle && strlen(aTitle) ) - { - strcat(lDialogString, "with prompt \"") ; - strcat(lDialogString, aTitle) ; - strcat(lDialogString, "\" ") ; - } - if ( aDefaultPath && strlen(aDefaultPath) ) - { - strcat(lDialogString, "default location \"") ; - strcat(lDialogString, aDefaultPath ) ; - strcat(lDialogString , "\" " ) ; - } - strcat( lDialogString , ")' " ) ; - strcat(lDialogString, "-e 'on error number -128' " ) ; - strcat(lDialogString, "-e 'end try'") ; - if ( ! osx9orBetter() ) strcat( lDialogString, " -e 'end tell'") ; - } - else if ( kdialogPresent() ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"kdialog");return (char const *)1;} - strcpy( lDialogString , "kdialog" ) ; - if ( kdialogPresent() == 2 ) - { - strcat(lDialogString, " --attach=$(xprop -root 32x '\t$0' _NET_ACTIVE_WINDOW | cut -f 2)"); /* contribution: Paul Rouget */ - } - strcat( lDialogString , " --getexistingdirectory " ) ; - - if ( aDefaultPath && strlen(aDefaultPath) ) - { - if ( aDefaultPath[0] != '/' ) - { - strcat(lDialogString, "$PWD/") ; - } - strcat(lDialogString, "\"") ; - strcat(lDialogString, aDefaultPath ) ; - strcat(lDialogString , "\"" ) ; - } - else - { - strcat(lDialogString, "$PWD/") ; - } - - if ( aTitle && strlen(aTitle) ) - { - strcat(lDialogString, " --title \"") ; - strcat(lDialogString, aTitle) ; - strcat(lDialogString, "\"") ; - } - } - else if ( zenityPresent() || matedialogPresent() || shellementaryPresent() || qarmaPresent() ) - { - if ( zenityPresent() ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"zenity");return (char const *)1;} - strcpy( lDialogString , "zenity" ) ; - if ( (zenity3Present() >= 4) && !getenv("SSH_TTY") ) - { - strcat( lDialogString, " --attach=$(sleep .01;xprop -root 32x '\t$0' _NET_ACTIVE_WINDOW | cut -f 2)"); /* contribution: Paul Rouget */ - } - } - else if ( matedialogPresent() ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"matedialog");return (char const *)1;} - strcpy( lDialogString , "matedialog" ) ; - } - else if ( shellementaryPresent() ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"shellementary");return (char const *)1;} - strcpy( lDialogString , "shellementary" ) ; - } - else - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"qarma");return (char const *)1;} - strcpy( lDialogString , "qarma" ) ; - if ( !getenv("SSH_TTY") ) - { - strcat(lDialogString, " --attach=$(xprop -root 32x '\t$0' _NET_ACTIVE_WINDOW | cut -f 2)"); /* contribution: Paul Rouget */ - } - } - strcat( lDialogString , " --file-selection --directory" ) ; - - if ( aTitle && strlen(aTitle) ) - { - strcat(lDialogString, " --title=\"") ; - strcat(lDialogString, aTitle) ; - strcat(lDialogString, "\"") ; - } - if ( aDefaultPath && strlen(aDefaultPath) ) - { - strcat(lDialogString, " --filename=\"") ; - strcat(lDialogString, aDefaultPath) ; - strcat(lDialogString, "\"") ; - } - } - else if ( !xdialogPresent() && tkinter2Present( ) ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"python2-tkinter");return (char const *)1;} - strcpy( lDialogString , gPython2Name ) ; - if ( ! isTerminalRunning( ) && isDarwin( ) ) - { - strcat( lDialogString , " -i" ) ; /* for osx without console */ - } - strcat( lDialogString , -" -S -c \"import Tkinter,tkFileDialog;root=Tkinter.Tk();root.withdraw();"); - - if ( isDarwin( ) ) - { - strcat( lDialogString , -"import os;os.system('''/usr/bin/osascript -e 'tell app \\\"Finder\\\" to set \ -frontmost of process \\\"Python\\\" to true' ''');"); - } - - strcat( lDialogString , "print tkFileDialog.askdirectory("); - if ( aTitle && strlen(aTitle) ) - { - strcat(lDialogString, "title='") ; - strcat(lDialogString, aTitle) ; - strcat(lDialogString, "',") ; - } - if ( aDefaultPath && strlen(aDefaultPath) ) - { - strcat(lDialogString, "initialdir='") ; - strcat(lDialogString, aDefaultPath ) ; - strcat(lDialogString , "'" ) ; - } - strcat( lDialogString , ")\"" ) ; - } - else if ( !xdialogPresent() && tkinter3Present( ) ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"python3-tkinter");return (char const *)1;} - strcpy( lDialogString , gPython3Name ) ; - strcat( lDialogString , - " -S -c \"import tkinter;from tkinter import filedialog;root=tkinter.Tk();root.withdraw();"); - strcat( lDialogString , "print( filedialog.askdirectory("); - if ( aTitle && strlen(aTitle) ) - { - strcat(lDialogString, "title='") ; - strcat(lDialogString, aTitle) ; - strcat(lDialogString, "',") ; - } - if ( aDefaultPath && strlen(aDefaultPath) ) - { - strcat(lDialogString, "initialdir='") ; - strcat(lDialogString, aDefaultPath ) ; - strcat(lDialogString , "'" ) ; - } - strcat( lDialogString , ") )\"" ) ; - } - else if ( xdialogPresent() || dialogName() ) - { - if ( xdialogPresent( ) ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"xdialog");return (char const *)1;} - lWasGraphicDialog = 1 ; - strcpy( lDialogString , "(Xdialog " ) ; - } - else if ( isTerminalRunning( ) ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"dialog");return (char const *)0;} - strcpy( lDialogString , "(dialog " ) ; - } - else - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"dialog");return (char const *)0;} - lWasXterm = 1 ; - strcpy( lDialogString , terminalName() ) ; - strcat( lDialogString , "'(" ) ; - strcat( lDialogString , dialogName() ) ; - strcat( lDialogString , " " ) ; - } - - if ( aTitle && strlen(aTitle) ) - { - strcat(lDialogString, "--title \"") ; - strcat(lDialogString, aTitle) ; - strcat(lDialogString, "\" ") ; - } - - if ( !xdialogPresent() && !gdialogPresent() ) - { - strcat(lDialogString, "--backtitle \"") ; - strcat(lDialogString, - "tab: focus | /: populate | spacebar: fill text field | ok: TEXT FIELD ONLY") ; - strcat(lDialogString, "\" ") ; - } - - strcat( lDialogString , "--dselect \"" ) ; - if ( aDefaultPath && strlen(aDefaultPath) ) - { - strcat(lDialogString, aDefaultPath) ; - ensureFinalSlash(lDialogString); - } - else if ( ! isTerminalRunning( ) && !lWasGraphicDialog ) - { - strcat(lDialogString, getenv("HOME")) ; - strcat(lDialogString, "/"); - } - else - { - strcat(lDialogString, "./") ; - } - - if ( lWasGraphicDialog ) - { - strcat(lDialogString, "\" 0 60 ) 2>&1 ") ; - } - else - { - strcat(lDialogString, "\" 0 60 >/dev/tty) ") ; - if ( lWasXterm ) - { - strcat( lDialogString , - "2>/tmp/tinyfd.txt';cat /tmp/tinyfd.txt;rm /tmp/tinyfd.txt"); - } - else - { - strcat(lDialogString, "2>&1 ; clear >/dev/tty") ; - } - } - } - else - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){return tinyfd_inputBox(aTitle,NULL,NULL);} - p = tinyfd_inputBox(aTitle, "Select folder",""); - if ( !p || ! strlen( p ) || ! dirExists( p ) ) - { - return NULL ; - } - return p ; - } - if (tinyfd_verbose) printf( "lDialogString: %s\n" , lDialogString ) ; - if ( ! ( lIn = popen( lDialogString , "r" ) ) ) - { - return NULL ; - } - while ( fgets( lBuff , sizeof( lBuff ) , lIn ) != NULL ) - {} - pclose( lIn ) ; - if ( lBuff[strlen( lBuff ) -1] == '\n' ) - { - lBuff[strlen( lBuff ) -1] = '\0' ; - } - /* printf( "lBuff: %s\n" , lBuff ) ; */ - if ( ! strlen( lBuff ) || ! dirExists( lBuff ) ) - { - return NULL ; - } - return lBuff ; -} - - -/* returns the hexcolor as a string "#FF0000" */ -/* aoResultRGB also contains the result */ -/* aDefaultRGB is used only if aDefaultHexRGB is NULL */ -/* aDefaultRGB and aoResultRGB can be the same array */ -char const * tinyfd_colorChooser( - char const * const aTitle , /* NULL or "" */ - char const * const aDefaultHexRGB , /* NULL or "#FF0000"*/ - unsigned char const aDefaultRGB[3] , /* { 0 , 255 , 255 } */ - unsigned char aoResultRGB[3] ) /* { 0 , 0 , 0 } */ -{ - static char lBuff [128] ; - char lTmp [128] ; - char lDialogString [MAX_PATH_OR_CMD] ; - char lDefaultHexRGB[8]; - char * lpDefaultHexRGB; - unsigned char lDefaultRGB[3]; - char const * p; - FILE * lIn ; - int i ; - int lWasZenity3 = 0 ; - int lWasOsascript = 0 ; - int lWasXdialog = 0 ; - lBuff[0]='\0'; - - if ( aDefaultHexRGB ) - { - Hex2RGB( aDefaultHexRGB , lDefaultRGB ) ; - lpDefaultHexRGB = (char *) aDefaultHexRGB ; - } - else - { - lDefaultRGB[0]=aDefaultRGB[0]; - lDefaultRGB[1]=aDefaultRGB[1]; - lDefaultRGB[2]=aDefaultRGB[2]; - RGB2Hex( aDefaultRGB , lDefaultHexRGB ) ; - lpDefaultHexRGB = (char *) lDefaultHexRGB ; - } - - if ( osascriptPresent( ) ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"applescript");return (char const *)1;} - lWasOsascript = 1 ; - strcpy( lDialogString , "osascript"); - - if ( ! osx9orBetter() ) - { - strcat( lDialogString , " -e 'tell application \"System Events\"' -e 'Activate'"); - strcat( lDialogString , " -e 'try' -e 'set mycolor to choose color default color {"); - } - else - { - strcat( lDialogString , -" -e 'try' -e 'tell app (path to frontmost application as Unicode text) \ -to set mycolor to choose color default color {"); - } - - sprintf(lTmp, "%d", 256 * lDefaultRGB[0] ) ; - strcat(lDialogString, lTmp ) ; - strcat(lDialogString, "," ) ; - sprintf(lTmp, "%d", 256 * lDefaultRGB[1] ) ; - strcat(lDialogString, lTmp ) ; - strcat(lDialogString, "," ) ; - sprintf(lTmp, "%d", 256 * lDefaultRGB[2] ) ; - strcat(lDialogString, lTmp ) ; - strcat(lDialogString, "}' " ) ; - strcat( lDialogString , -"-e 'set mystring to ((item 1 of mycolor) div 256 as integer) as string' " ); - strcat( lDialogString , -"-e 'repeat with i from 2 to the count of mycolor' " ); - strcat( lDialogString , -"-e 'set mystring to mystring & \" \" & ((item i of mycolor) div 256 as integer) as string' " ); - strcat( lDialogString , "-e 'end repeat' " ); - strcat( lDialogString , "-e 'mystring' "); - strcat(lDialogString, "-e 'on error number -128' " ) ; - strcat(lDialogString, "-e 'end try'") ; - if ( ! osx9orBetter() ) strcat( lDialogString, " -e 'end tell'") ; - } - else if ( kdialogPresent() ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"kdialog");return (char const *)1;} - strcpy( lDialogString , "kdialog" ) ; - if ( kdialogPresent() == 2 ) - { - strcat(lDialogString, " --attach=$(xprop -root 32x '\t$0' _NET_ACTIVE_WINDOW | cut -f 2)"); /* contribution: Paul Rouget */ - } - sprintf( lDialogString + strlen(lDialogString) , " --getcolor --default '%s'" , lpDefaultHexRGB ) ; - - if ( aTitle && strlen(aTitle) ) - { - strcat(lDialogString, " --title \"") ; - strcat(lDialogString, aTitle) ; - strcat(lDialogString, "\"") ; - } - } - else if ( zenity3Present() || matedialogPresent() || shellementaryPresent() || qarmaPresent() ) - { - lWasZenity3 = 1 ; - if ( zenity3Present() ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"zenity3");return (char const *)1;} - strcpy( lDialogString , "zenity" ); - if ( (zenity3Present() >= 4) && !getenv("SSH_TTY") ) - { - strcat( lDialogString, " --attach=$(sleep .01;xprop -root 32x '\t$0' _NET_ACTIVE_WINDOW | cut -f 2)"); /* contribution: Paul Rouget */ - } - } - else if ( matedialogPresent() ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"matedialog");return (char const *)1;} - strcpy( lDialogString , "matedialog" ) ; - } - else if ( shellementaryPresent() ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"shellementary");return (char const *)1;} - strcpy( lDialogString , "shellementary" ) ; - } - else - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"qarma");return (char const *)1;} - strcpy( lDialogString , "qarma" ) ; - if ( !getenv("SSH_TTY") ) - { - strcat(lDialogString, " --attach=$(xprop -root 32x '\t$0' _NET_ACTIVE_WINDOW | cut -f 2)"); /* contribution: Paul Rouget */ - } - } - strcat( lDialogString , " --color-selection --show-palette" ) ; - sprintf( lDialogString + strlen(lDialogString), " --color=%s" , lpDefaultHexRGB ) ; - - if ( aTitle && strlen(aTitle) ) - { - strcat(lDialogString, " --title=\"") ; - strcat(lDialogString, aTitle) ; - strcat(lDialogString, "\"") ; - } - } - else if ( xdialogPresent() ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"xdialog");return (char const *)1;} - lWasXdialog = 1 ; - strcpy( lDialogString , "Xdialog --colorsel \"" ) ; - if ( aTitle && strlen(aTitle) ) - { - strcat(lDialogString, aTitle) ; - } - strcat(lDialogString, "\" 0 60 ") ; - sprintf(lTmp,"%hhu %hhu %hhu",lDefaultRGB[0], - lDefaultRGB[1],lDefaultRGB[2]); - strcat(lDialogString, lTmp) ; - strcat(lDialogString, " 2>&1"); - } - else if ( tkinter2Present( ) ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"python2-tkinter");return (char const *)1;} - strcpy( lDialogString , gPython2Name ) ; - if ( ! isTerminalRunning( ) && isDarwin( ) ) - { - strcat( lDialogString , " -i" ) ; /* for osx without console */ - } - - strcat( lDialogString , -" -S -c \"import Tkinter,tkColorChooser;root=Tkinter.Tk();root.withdraw();"); - - if ( isDarwin( ) ) - { - strcat( lDialogString , -"import os;os.system('''osascript -e 'tell app \\\"Finder\\\" to set \ -frontmost of process \\\"Python\\\" to true' ''');"); - } - - strcat( lDialogString , "res=tkColorChooser.askcolor(color='" ) ; - strcat(lDialogString, lpDefaultHexRGB ) ; - strcat(lDialogString, "'") ; - - - if ( aTitle && strlen(aTitle) ) - { - strcat(lDialogString, ",title='") ; - strcat(lDialogString, aTitle) ; - strcat(lDialogString, "'") ; - } - strcat( lDialogString , ");\ -\nif res[1] is not None:\n\tprint res[1]\"" ) ; - } - else if ( tkinter3Present( ) ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"python3-tkinter");return (char const *)1;} - strcpy( lDialogString , gPython3Name ) ; - strcat( lDialogString , - " -S -c \"import tkinter;from tkinter import colorchooser;root=tkinter.Tk();root.withdraw();"); - strcat( lDialogString , "res=colorchooser.askcolor(color='" ) ; - strcat(lDialogString, lpDefaultHexRGB ) ; - strcat(lDialogString, "'") ; - - if ( aTitle && strlen(aTitle) ) - { - strcat(lDialogString, ",title='") ; - strcat(lDialogString, aTitle) ; - strcat(lDialogString, "'") ; - } - strcat( lDialogString , ");\ -\nif res[1] is not None:\n\tprint(res[1])\"" ) ; - } - else - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){return tinyfd_inputBox(aTitle,NULL,NULL);} - p = tinyfd_inputBox(aTitle, - "Enter hex rgb color (i.e. #f5ca20)",lpDefaultHexRGB); - if ( !p || (strlen(p) != 7) || (p[0] != '#') ) - { - return NULL ; - } - for ( i = 1 ; i < 7 ; i ++ ) - { - if ( ! isxdigit( p[i] ) ) - { - return NULL ; - } - } - Hex2RGB(p,aoResultRGB); - return p ; - } - - if (tinyfd_verbose) printf( "lDialogString: %s\n" , lDialogString ) ; - if ( ! ( lIn = popen( lDialogString , "r" ) ) ) - { - return NULL ; - } - while ( fgets( lBuff , sizeof( lBuff ) , lIn ) != NULL ) - { - } - pclose( lIn ) ; - if ( ! strlen( lBuff ) ) - { - return NULL ; - } - /* printf( "len Buff: %lu\n" , strlen(lBuff) ) ; */ - /* printf( "lBuff0: %s\n" , lBuff ) ; */ - if ( lBuff[strlen( lBuff ) -1] == '\n' ) - { - lBuff[strlen( lBuff ) -1] = '\0' ; - } - - if ( lWasZenity3 ) - { - if ( lBuff[0] == '#' ) - { - if ( strlen(lBuff)>7 ) - { - lBuff[3]=lBuff[5]; - lBuff[4]=lBuff[6]; - lBuff[5]=lBuff[9]; - lBuff[6]=lBuff[10]; - lBuff[7]='\0'; - } - Hex2RGB(lBuff,aoResultRGB); - } - else if ( lBuff[3] == '(' ) { - sscanf(lBuff,"rgb(%hhu,%hhu,%hhu", - & aoResultRGB[0], & aoResultRGB[1],& aoResultRGB[2]); - RGB2Hex(aoResultRGB,lBuff); - } - else if ( lBuff[4] == '(' ) { - sscanf(lBuff,"rgba(%hhu,%hhu,%hhu", - & aoResultRGB[0], & aoResultRGB[1],& aoResultRGB[2]); - RGB2Hex(aoResultRGB,lBuff); - } - } - else if ( lWasOsascript || lWasXdialog ) - { - /* printf( "lBuff: %s\n" , lBuff ) ; */ - sscanf(lBuff,"%hhu %hhu %hhu", - & aoResultRGB[0], & aoResultRGB[1],& aoResultRGB[2]); - RGB2Hex(aoResultRGB,lBuff); - } - else - { - Hex2RGB(lBuff,aoResultRGB); - } - /* printf("%d %d %d\n", aoResultRGB[0],aoResultRGB[1],aoResultRGB[2]); */ - /* printf( "lBuff: %s\n" , lBuff ) ; */ - return lBuff ; -} - - -/* not cross platform - zenity only */ -/* contributed by Attila Dusnoki */ -char const * tinyfd_arrayDialog( - char const * const aTitle , /* "" */ - int const aNumOfColumns , /* 2 */ - char const * const * const aColumns , /* {"Column 1","Column 2"} */ - int const aNumOfRows , /* 2 */ - char const * const * const aCells ) - /* {"Row1 Col1","Row1 Col2","Row2 Col1","Row2 Col2"} */ -{ - static char lBuff [MAX_PATH_OR_CMD] ; - char lDialogString [MAX_PATH_OR_CMD] ; - FILE * lIn ; - int i ; - - lBuff[0]='\0'; - - if ( zenityPresent() || matedialogPresent() || shellementaryPresent() || qarmaPresent() ) - { - if ( zenityPresent() ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"zenity");return (char const *)1;} - strcpy( lDialogString , "zenity" ) ; - if ( (zenity3Present() >= 4) && !getenv("SSH_TTY") ) - { - strcat( lDialogString, " --attach=$(sleep .01;xprop -root 32x '\t$0' _NET_ACTIVE_WINDOW | cut -f 2)"); /* contribution: Paul Rouget */ - } - } - else if ( matedialogPresent() ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"matedialog");return (char const *)1;} - strcpy( lDialogString , "matedialog" ) ; - } - else if ( shellementaryPresent() ) - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"shellementary");return (char const *)1;} - strcpy( lDialogString , "shellementary" ) ; - } - else - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"qarma");return (char const *)1;} - strcpy( lDialogString , "qarma" ) ; - if ( !getenv("SSH_TTY") ) - { - strcat(lDialogString, " --attach=$(xprop -root 32x '\t$0' _NET_ACTIVE_WINDOW | cut -f 2)"); /* contribution: Paul Rouget */ - } - } - strcat( lDialogString , " --list --print-column=ALL" ) ; - - if ( aTitle && strlen(aTitle) ) - { - strcat(lDialogString, " --title=\"") ; - strcat(lDialogString, aTitle) ; - strcat(lDialogString, "\"") ; - } - - if ( aColumns && (aNumOfColumns > 0) ) - { - for ( i = 0 ; i < aNumOfColumns ; i ++ ) - { - strcat( lDialogString , " --column=\"" ) ; - strcat( lDialogString , aColumns [i] ) ; - strcat( lDialogString , "\"" ) ; - } - } - - if ( aCells && (aNumOfRows > 0) ) - { - strcat( lDialogString , " " ) ; - for ( i = 0 ; i < aNumOfRows*aNumOfColumns ; i ++ ) - { - strcat( lDialogString , "\"" ) ; - strcat( lDialogString , aCells [i] ) ; - strcat( lDialogString , "\" " ) ; - } - } - } - else - { - if (aTitle&&!strcmp(aTitle,"tinyfd_query")){strcpy(tinyfd_response,"");return (char const *)0;} - return NULL ; - } - - if (tinyfd_verbose) printf( "lDialogString: %s\n" , lDialogString ) ; - if ( ! ( lIn = popen( lDialogString , "r" ) ) ) - { - return NULL ; - } - while ( fgets( lBuff , sizeof( lBuff ) , lIn ) != NULL ) - {} - pclose( lIn ) ; - if ( lBuff[strlen( lBuff ) -1] == '\n' ) - { - lBuff[strlen( lBuff ) -1] = '\0' ; - } - /* printf( "lBuff: %s\n" , lBuff ) ; */ - if ( ! strlen( lBuff ) ) - { - return NULL ; - } - return lBuff ; -} -#endif /* _WIN32 */ - - -/* -int main( int argc , char * argv[] ) -{ -char const * lTmp; -char const * lTheSaveFileName; -char const * lTheOpenFileName; -char const * lTheSelectFolderName; -char const * lTheHexColor; -char const * lWillBeGraphicMode; -unsigned char lRgbColor[3]; -FILE * lIn; -char lBuffer[1024]; -char lString[1024]; -char const * lFilterPatterns[2] = { "*.txt", "*.text" }; - -tinyfd_verbose = argc - 1; - -lWillBeGraphicMode = tinyfd_inputBox("tinyfd_query", NULL, NULL); - -strcpy(lBuffer, "v"); -strcat(lBuffer, tinyfd_version); -if (lWillBeGraphicMode) -{ - strcat(lBuffer, "\ngraphic mode: "); -} -else -{ - strcat(lBuffer, "\nconsole mode: "); -} -strcat(lBuffer, tinyfd_response); -strcat(lBuffer, "\n"); -strcat(lBuffer, tinyfd_needs+78); -strcpy(lString, "tinyfiledialogs"); -tinyfd_messageBox(lString, lBuffer, "ok", "info", 0); - -tinyfd_notifyPopup("the title", "the message\n\tfrom outer-space", "info"); - -if (lWillBeGraphicMode && !tinyfd_forceConsole) -{ - tinyfd_forceConsole = ! tinyfd_messageBox("Hello World", - "graphic dialogs [yes] / console mode [no]?", - "yesno", "question", 1); -} - -lTmp = tinyfd_inputBox( - "a password box", "your password will be revealed", NULL); - -if (!lTmp) return 1; - -strcpy(lString, lTmp); - -lTheSaveFileName = tinyfd_saveFileDialog( - "let us save this password", - "passwordFile.txt", - 2, - lFilterPatterns, - NULL); - -if (!lTheSaveFileName) -{ - tinyfd_messageBox( - "Error", - "Save file name is NULL", - "ok", - "error", - 1); - return 1; -} - -lIn = fopen(lTheSaveFileName, "w"); -if (!lIn) -{ - tinyfd_messageBox( - "Error", - "Can not open this file in write mode", - "ok", - "error", - 1); - return 1; -} -fputs(lString, lIn); -fclose(lIn); - -lTheOpenFileName = tinyfd_openFileDialog( - "let us read the password back", - "", - 2, - lFilterPatterns, - NULL, - 0); - -if (!lTheOpenFileName) -{ - tinyfd_messageBox( - "Error", - "Open file name is NULL", - "ok", - "error", - 1); - return 1; -} - -lIn = fopen(lTheOpenFileName, "r"); - -if (!lIn) -{ - tinyfd_messageBox( - "Error", - "Can not open this file in read mode", - "ok", - "error", - 1); - return(1); -} -lBuffer[0] = '\0'; -fgets(lBuffer, sizeof(lBuffer), lIn); -fclose(lIn); - -tinyfd_messageBox("your password is", - lBuffer, "ok", "info", 1); - -lTheSelectFolderName = tinyfd_selectFolderDialog( - "let us just select a directory", NULL); - -if (!lTheSelectFolderName) -{ - tinyfd_messageBox( - "Error", - "Select folder name is NULL", - "ok", - "error", - 1); - return 1; -} - -tinyfd_messageBox("The selected folder is", - lTheSelectFolderName, "ok", "info", 1); - -lTheHexColor = tinyfd_colorChooser( - "choose a nice color", - "#FF0077", - lRgbColor, - lRgbColor); - -if (!lTheHexColor) -{ - tinyfd_messageBox( - "Error", - "hexcolor is NULL", - "ok", - "error", - 1); - return 1; -} - -tinyfd_messageBox("The selected hexcolor is", - lTheHexColor, "ok", "info", 1); - - tinyfd_beep(); - - return 0; -} -*/ - -#ifdef _MSC_VER -#pragma warning(default:4996) -#pragma warning(default:4100) -#pragma warning(default:4706) -#endif diff --git a/tools/rGuiLayout/src/external/tinyfiledialogs.h b/tools/rGuiLayout/src/external/tinyfiledialogs.h deleted file mode 100644 index 1025b2e..0000000 --- a/tools/rGuiLayout/src/external/tinyfiledialogs.h +++ /dev/null @@ -1,325 +0,0 @@ -/*_________ - / \ tinyfiledialogs.h v3.3.1 [Feb 16, 2018] zlib licence - |tiny file| Unique header file created [November 9, 2014] - | dialogs | Copyright (c) 2014 - 2018 Guillaume Vareille http://ysengrin.com - \____ ___/ http://tinyfiledialogs.sourceforge.net - \| git clone http://git.code.sf.net/p/tinyfiledialogs/code tinyfd - ____________________________________________ - | | - | email: tinyfiledialogs at ysengrin.com | - |____________________________________________| - ________________________________________________________________________ - | | - | the windows only wchar_t UTF-16 prototypes are at the end of this file | - |________________________________________________________________________| - -Please 1) let me know If you are using it on exotic hardware / OS / compiler - 2) leave a 1-word review on Sourceforge. - 3) upvote my stackoverflow answer/advert https://stackoverflow.com/a/47651444 - -tiny file dialogs (cross-platform C C++) -InputBox PasswordBox MessageBox ColorPicker -OpenFileDialog SaveFileDialog SelectFolderDialog -Native dialog library for WINDOWS MAC OSX GTK+ QT CONSOLE & more -SSH supported via automatic switch to console mode or X11 forwarding - -a C file + a header (add them to your C or C++ project) with 8 functions: -- beep -- notify popup -- message & question -- input & password -- save file -- open file(s) -- select folder -- color picker - -Complements OpenGL GLFW GLUT GLUI VTK SFML TGUI SDL Ogre Unity3d ION OpenCV -CEGUI MathGL GLM CPW GLOW IMGUI MyGUI GLT NGL STB & GUI less programs - -NO INIT -NO MAIN LOOP -NO LINKING -NO INCLUDE - -The dialogs can be forced into console mode - -Windows (XP to 10) ASCII MBCS UTF-8 UTF-16 -- native code & vbs create the graphic dialogs -- enhanced console mode can use dialog.exe from -http://andrear.altervista.org/home/cdialog.php -- basic console input - -Unix (command line calls) ASCII UTF-8 -- applescript, kdialog, zenity -- python (2 or 3) + tkinter + python-dbus (optional) -- dialog (opens a console if needed) -- basic console input -The same executable can run across desktops & distributions - -C89 & C++98 compliant: tested with C & C++ compilers -VisualStudio MinGW-gcc GCC Clang TinyCC OpenWatcom-v2 BorlandC SunCC -on Windows Mac Linux Bsd Solaris Minix Raspbian -using Gnome Kde Enlightenment Mate Cinnamon Unity Lxde Lxqt Xfce -WindowMaker IceWm Cde Jds OpenBox Awesome Jwm Xdm - -Bindings for LUA and C# dll, Haskell -Included in LWJGL(java), Rust, Allegrobasic - -- License - - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not -claim that you wrote the original software. If you use this software -in a product, an acknowledgment in the product documentation would be -appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be -misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#ifndef TINYFILEDIALOGS_H -#define TINYFILEDIALOGS_H - -/* #define TINYFD_NOLIB */ -/* On windows, define TINYFD_NOLIB here -if you don't want to include the code creating the graphic dialogs. -Then you won't need to link against Comdlg32.lib and Ole32.lib */ - -/* if tinydialogs.c is compiled as C++ code rather than C code, -you may need to comment out: -extern "C" { -and the corresponding closing bracket near the end of this file: -} -*/ -#ifdef __cplusplus -extern "C" { -#endif - -extern char tinyfd_version[8]; /* contains tinyfd current version number */ -extern int tinyfd_verbose; /* 0 (default) or 1 : on unix, prints the command line calls */ -extern char tinyfd_needs[]; /* info about requirements */ - -#ifdef _WIN32 -/* for UTF-16 use the functions at the end of this files */ -extern int tinyfd_winUtf8; /* 0 (default MBCS) or 1 (UTF-8)*/ -/* on windows string char can be 0:MBCS or 1:UTF-8 -unless your code is really prepared for UTF-8 on windows, leave this on MBSC. -Or you can use the UTF-16 (wchar) prototypes at the end of ths file.*/ -#endif - -extern int tinyfd_forceConsole; /* 0 (default) or 1 */ -/* for unix & windows: 0 (graphic mode) or 1 (console mode). -0: try to use a graphic solution, if it fails then it uses console mode. -1: forces all dialogs into console mode even when an X server is present, - if the package dialog (and a console is present) or dialog.exe is installed. - on windows it only make sense for console applications */ - -extern char tinyfd_response[1024]; -/* if you pass "tinyfd_query" as aTitle, -the functions will not display the dialogs -but will return 0 for console mode, 1 for graphic mode. -tinyfd_response is then filled with the retain solution. -possible values for tinyfd_response are (all lowercase) -for graphic mode: - windows_wchar windows - applescript kdialog zenity zenity3 matedialog qarma - python2-tkinter python3-tkinter python-dbus perl-dbus - gxmessage gmessage xmessage xdialog gdialog -for console mode: - dialog whiptail basicinput */ - -void tinyfd_beep(); - -int tinyfd_notifyPopup( - char const * const aTitle, /* NULL or "" */ - char const * const aMessage, /* NULL or "" may contain \n \t */ - char const * const aIconType); /* "info" "warning" "error" */ - /* return has only meaning for tinyfd_query */ - -int tinyfd_messageBox( - char const * const aTitle , /* NULL or "" */ - char const * const aMessage , /* NULL or "" may contain \n \t */ - char const * const aDialogType , /* "ok" "okcancel" "yesno" "yesnocancel" */ - char const * const aIconType , /* "info" "warning" "error" "question" */ - int const aDefaultButton ) ; - /* 0 for cancel/no , 1 for ok/yes , 2 for no in yesnocancel */ - -char const * tinyfd_inputBox( - char const * const aTitle , /* NULL or "" */ - char const * const aMessage , /* NULL or "" may NOT contain \n \t on windows */ - char const * const aDefaultInput ) ; /* "" , if NULL it's a passwordBox */ - /* returns NULL on cancel */ - -char const * tinyfd_saveFileDialog( - char const * const aTitle , /* NULL or "" */ - char const * const aDefaultPathAndFile , /* NULL or "" */ - int const aNumOfFilterPatterns , /* 0 */ - char const * const * const aFilterPatterns , /* NULL | {"*.jpg","*.png"} */ - char const * const aSingleFilterDescription ) ; /* NULL | "text files" */ - /* returns NULL on cancel */ - -char const * tinyfd_openFileDialog( - char const * const aTitle , /* NULL or "" */ - char const * const aDefaultPathAndFile , /* NULL or "" */ - int const aNumOfFilterPatterns , /* 0 */ - char const * const * const aFilterPatterns , /* NULL {"*.jpg","*.png"} */ - char const * const aSingleFilterDescription , /* NULL | "image files" */ - int const aAllowMultipleSelects ) ; /* 0 or 1 */ - /* in case of multiple files, the separator is | */ - /* returns NULL on cancel */ - -char const * tinyfd_selectFolderDialog( - char const * const aTitle , /* NULL or "" */ - char const * const aDefaultPath ) ; /* NULL or "" */ - /* returns NULL on cancel */ - -char const * tinyfd_colorChooser( - char const * const aTitle , /* NULL or "" */ - char const * const aDefaultHexRGB , /* NULL or "#FF0000" */ - unsigned char const aDefaultRGB[3] , /* { 0 , 255 , 255 } */ - unsigned char aoResultRGB[3] ) ; /* { 0 , 0 , 0 } */ - /* returns the hexcolor as a string "#FF0000" */ - /* aoResultRGB also contains the result */ - /* aDefaultRGB is used only if aDefaultHexRGB is NULL */ - /* aDefaultRGB and aoResultRGB can be the same array */ - /* returns NULL on cancel */ - - -/************ NOT CROSS PLATFORM SECTION STARTS HERE ************************/ -#ifdef _WIN32 -#ifndef TINYFD_NOLIB - -/* windows only - utf-16 version */ -int tinyfd_notifyPopupW( - wchar_t const * const aTitle, /* NULL or L"" */ - wchar_t const * const aMessage, /* NULL or L"" may contain \n \t */ - wchar_t const * const aIconType); /* L"info" L"warning" L"error" */ - -/* windows only - utf-16 version */ -int tinyfd_messageBoxW( - wchar_t const * const aTitle , /* NULL or L"" */ - wchar_t const * const aMessage, /* NULL or L"" may contain \n \t */ - wchar_t const * const aDialogType, /* L"ok" L"okcancel" L"yesno" */ - wchar_t const * const aIconType, /* L"info" L"warning" L"error" L"question" */ - int const aDefaultButton ); /* 0 for cancel/no , 1 for ok/yes */ - /* returns 0 for cancel/no , 1 for ok/yes */ - -/* windows only - utf-16 version */ -wchar_t const * tinyfd_inputBoxW( - wchar_t const * const aTitle, /* NULL or L"" */ - wchar_t const * const aMessage, /* NULL or L"" may NOT contain \n nor \t */ - wchar_t const * const aDefaultInput ); /* L"" , if NULL it's a passwordBox */ - -/* windows only - utf-16 version */ -wchar_t const * tinyfd_saveFileDialogW( - wchar_t const * const aTitle, /* NULL or L"" */ - wchar_t const * const aDefaultPathAndFile, /* NULL or L"" */ - int const aNumOfFilterPatterns, /* 0 */ - wchar_t const * const * const aFilterPatterns, /* NULL or {L"*.jpg",L"*.png"} */ - wchar_t const * const aSingleFilterDescription); /* NULL or L"image files" */ - /* returns NULL on cancel */ - -/* windows only - utf-16 version */ -wchar_t const * tinyfd_openFileDialogW( - wchar_t const * const aTitle, /* NULL or L"" */ - wchar_t const * const aDefaultPathAndFile, /* NULL or L"" */ - int const aNumOfFilterPatterns , /* 0 */ - wchar_t const * const * const aFilterPatterns, /* NULL {L"*.jpg",L"*.png"} */ - wchar_t const * const aSingleFilterDescription, /* NULL or L"image files" */ - int const aAllowMultipleSelects ) ; /* 0 or 1 */ - /* in case of multiple files, the separator is | */ - /* returns NULL on cancel */ - -/* windows only - utf-16 version */ -wchar_t const * tinyfd_selectFolderDialogW( - wchar_t const * const aTitle, /* NULL or L"" */ - wchar_t const * const aDefaultPath); /* NULL or L"" */ - /* returns NULL on cancel */ - -/* windows only - utf-16 version */ -wchar_t const * tinyfd_colorChooserW( - wchar_t const * const aTitle, /* NULL or L"" */ - wchar_t const * const aDefaultHexRGB, /* NULL or L"#FF0000" */ - unsigned char const aDefaultRGB[3] , /* { 0 , 255 , 255 } */ - unsigned char aoResultRGB[3] ) ; /* { 0 , 0 , 0 } */ - /* returns the hexcolor as a string L"#FF0000" */ - /* aoResultRGB also contains the result */ - /* aDefaultRGB is used only if aDefaultHexRGB is NULL */ - /* aDefaultRGB and aoResultRGB can be the same array */ - /* returns NULL on cancel */ - - -#endif /*TINYFD_NOLIB*/ -#else /*_WIN32*/ - -/* unix zenity only */ -char const * tinyfd_arrayDialog( - char const * const aTitle , /* NULL or "" */ - int const aNumOfColumns , /* 2 */ - char const * const * const aColumns, /* {"Column 1","Column 2"} */ - int const aNumOfRows, /* 2 */ - char const * const * const aCells); - /* {"Row1 Col1","Row1 Col2","Row2 Col1","Row2 Col2"} */ - -#endif /*_WIN32 */ - -#ifdef __cplusplus -} -#endif - -#endif /* TINYFILEDIALOGS_H */ - -/* -- This is not for android nor ios. -- The code is pure C, perfectly compatible with C++. -- the windows only wchar_t (utf-16) prototypes are in the header file -- windows is fully supported from XP to 10 (maybe even older versions) -- C# & LUA via dll, see example files -- OSX supported from 10.4 to latest (maybe even older versions) -- Avoid using " and ' in titles and messages. -- There's one file filter only, it may contain several patterns. -- If no filter description is provided, - the list of patterns will become the description. -- char const * filterPatterns[3] = { "*.obj" , "*.stl" , "*.dxf" } ; -- On windows char defaults to MBCS, set tinyfd_winUtf8=1 to use UTF-8 -- On windows link against Comdlg32.lib and Ole32.lib - This linking is not compulsary for console mode (see above). -- On unix: it tries command line calls, so no such need. -- On unix you need one of the following: - applescript, kdialog, zenity, matedialog, shellementary, qarma, - python (2 or 3)/tkinter/python-dbus (optional), Xdialog - or dialog (opens terminal if running without console) or xterm. -- One of those is already included on most (if not all) desktops. -- In the absence of those it will use gdialog, gxmessage or whiptail - with a textinputbox. -- If nothing is found, it switches to basic console input, - it opens a console if needed (requires xterm + bash). -- Use windows separators on windows and unix separators on unix. -- String memory is preallocated statically for all the returned values. -- File and path names are tested before return, they are valid. -- If you pass only a path instead of path + filename, - make sure it ends with a separator. -- tinyfd_forceConsole=1; at run time, forces dialogs into console mode. -- On windows, console mode only make sense for console applications. -- On windows, Console mode is not implemented for wchar_T UTF-16. -- Mutiple selects are not allowed in console mode. -- The package dialog must be installed to run in enhanced console mode. - It is already installed on most unix systems. -- On osx, the package dialog can be installed via - http://macappstore.org/dialog or http://macports.org -- On windows, for enhanced console mode, - dialog.exe should be copied somewhere on your executable path. - It can be found at the bottom of the following page: - http://andrear.altervista.org/home/cdialog.php -- If dialog is missing, it will switch to basic console input. -- You can query the type of dialog that will be use. -- MinGW needs gcc >= v4.9 otherwise some headers are incomplete. -- The Hello World (and a bit more) is on the sourceforge site: -*/ diff --git a/tools/rGuiLayout/src/rguilayout.c b/tools/rGuiLayout/src/rguilayout.c deleted file mode 100644 index 35a931d..0000000 --- a/tools/rGuiLayout/src/rguilayout.c +++ /dev/null @@ -1,2351 +0,0 @@ -/******************************************************************************************* -* -* rGuiLayout v1.1 - raygui layout editor -* -* Compile this program using: -* gcc -o rguilayout.exe rguilayout.c external/tinyfiledialogs.c -I..\.. \ -* -lraylib -lopengl32 -lgdi32 -lcomdlg32 -lole32 -std=c99 -Wall -* -* CONTRIBUTORS: -* Ramon Santamaria: Supervision, review, design, update and maintenance... -* Adria Arranz: Design and implementation (2018) -* Jordi Jorba: Design and implementation (2018) -* -* LICENSE: zlib/libpng -* -* Copyright (c) 2014-2018 raylib technologies (@raysan5) -* -* This software is provided "as-is", without any express or implied warranty. In no event -* will the authors be held liable for any damages arising from the use of this software. -* -* Permission is granted to anyone to use this software for any purpose, including commercial -* applications, and to alter it and redistribute it freely, subject to the following restrictions: -* -* 1. The origin of this software must not be misrepresented; you must not claim that you -* wrote the original software. If you use this software in a product, an acknowledgment -* in the product documentation would be appreciated but is not required. -* -* 2. Altered source versions must be plainly marked as such, and must not be misrepresented -* as being the original software. -* -* 3. This notice may not be removed or altered from any source distribution. -* -**********************************************************************************************/ - -#include "raylib.h" - -#define RAYGUI_IMPLEMENTATION -#define RAYGUI_STYLE_SAVE_LOAD -//#define RAYGUI_STYLE_DEFAULT_DARK -#include "raygui.h" - -#include "external/easings.h" -#include "external/tinyfiledialogs.h" // Open/Save file dialogs - -#include - -//---------------------------------------------------------------------------------- -// Defines and Macros -//---------------------------------------------------------------------------------- -#define MAX_GUI_CONTROLS 256 // Maximum number of gui controls -#define MAX_ANCHOR_POINTS 8 // Maximum number of anchor points -#define ANCHOR_RADIUS 20 // Default anchor radius - -#define MAX_CONTROL_TEXT_LENGTH 64 // Maximum length of control text -#define MAX_CONTROL_NAME_LENGTH 32 // Maximum length of control name (used on code generation) - -#define GRID_LINE_SPACING 5 // Grid line spacing in pixels - -#define MOVEMENT_FRAME_SPEED 10 // Controls movement speed in pixels per frame - -#define PALETTE_EASING_FRAMES 30 // Controls the easing time in frames - -//---------------------------------------------------------------------------------- -// Types and Structures Definition -//---------------------------------------------------------------------------------- -typedef enum { - WINDOWBOX = 0, - GROUPBOX, - LINE, - PANEL, - LABEL, - BUTTON, - TOGGLE, - TOGGLEGROUP, - CHECKBOX, - COMBOBOX, - DROPDOWNBOX, - SPINNER, - VALUEBOX, - TEXTBOX, - SLIDER, - SLIDERBAR, - PROGRESSBAR, - STATUSBAR, - LISTVIEW, - COLORPICKER, - DUMMYREC -} GuiControlType; - -// Anchor point type -typedef struct { - int id; - int x; - int y; - bool enabled; - bool hidding; -} AnchorPoint; - -// Gui control type -typedef struct { - int id; - int type; - Rectangle rec; - unsigned char name[MAX_CONTROL_NAME_LENGTH]; - unsigned char text[MAX_CONTROL_TEXT_LENGTH]; - AnchorPoint *ap; -} GuiControl; - -// Gui layout type -typedef struct { - int controlsCount; - AnchorPoint anchors[MAX_ANCHOR_POINTS]; - GuiControl controls[MAX_GUI_CONTROLS]; -} GuiLayout; - -// Gui layout configuration type -typedef struct { - int width; - int height; - unsigned char name[64]; - unsigned char version[32]; - unsigned char company[128]; - unsigned char description[256]; - bool defineRecs; - bool exportAnchors; - bool exportAnchor0; - bool fullComments; - bool defineTexts; - bool cropWindow; - bool fullVariables; -} GuiLayoutConfig; - -//---------------------------------------------------------------------------------- -// Global Variables Definition -//---------------------------------------------------------------------------------- -static int screenWidth = 800; -static int screenHeight = 600; - -static GuiLayout layout = { 0 }; - -const char *controlTypeName[] = { "WINDOWBOX", "GROUPBOX", "LINE", "PANEL", "LABEL", "BUTTON", "TOGGLE", "TOGGLEGROUP", "CHECKBOX", "COMBOBOX", "DROPDOWNBOX", "SPINNER", "VALUEBOX", "TEXTBOX", "SLIDER", "SLIDERBAR", "PROGRESSBAR", "STATUSBAR", "LISTVIEW", "COLORPICKER", "DUMMYREC" }; -const char *controlTypeNameLow[] = { "WindowBox", "GroupBox", "Line", "Panel", "Label", "Button", "Toggle", "ToggleGroup", "CheckBox", "ComboBox", "DropdownBox", "Spinner", "ValueBox", "TextBox", "Slider", "SliderBar", "ProgressBar", "StatusBar", "ListView", "ColorPicker", "DummyRec" }; -const char *controlTypeNameShort[] = { "wdwbox", "grpbox", "lne", "pnl", "lbl", "btn", "tgl", "tglgrp", "chkbox", "combox", "ddwnbox", "spnr", "vlbox", "txtbox", "sldr", "sldrb", "prgssb", "stsb", "lstvw", "clrpckr", "dmyrc" }; - -static bool cancelSave = false; -static char loadedFileName[128] = "\0"; -//---------------------------------------------------------------------------------- -// Module specific Functions Declaration -//---------------------------------------------------------------------------------- -static void ShowSaveLayoutDialog(void); // Show save layout dialog -static void ShowExportLayoutDialog(GuiLayoutConfig config); // Show export layout dialog -static void SaveLayoutRGL(const char *fileName, bool binary); // Save gui layout project information -static void LoadLayoutRGL(const char *fileName); // Load gui layout project information -static void GenerateCode(const char *fileName, GuiLayoutConfig config); // Generate C code for gui layout -static void GenerateCodeFromRGL(const char *fileName); // Generate C code from .rgl file -static char *GetControlAnchorRec(int anchorId, Rectangle controlRec, GuiLayoutConfig config); // Get control rectangle - -//---------------------------------------------------------------------------------- -// Main Entry point -//---------------------------------------------------------------------------------- -int main() -{ - // Initialization - //-------------------------------------------------------------------------------------- - SetConfigFlags(FLAG_WINDOW_RESIZABLE); - InitWindow(screenWidth, screenHeight, "rGuiLayout v1.1"); - SetExitKey(0); - - // General app variables - Vector2 mouse; - bool exitWindow = false; // Exit window flag - bool snapMode = false; // Snap mode flag (KEY_S) - bool showGrid = true; // Show grid flag (KEY_G) - bool controlDrag = false; // Control drag mode - bool controlGlobalPos = false; // Control global position mode - bool textEditMode = false; // Control text edit mode (KEY_T) - bool nameEditMode = false; // Control name edit mode (KEY_N) - - int framesCounter = 0; - int framesCounterSnap = 0; - int selectedControl = -1; - int storedControl = -1; - int focusedControl = -1; - int selectedType = WINDOWBOX; - int selectedTypeDraw = LABEL; - Vector2 panControlOffset = { 0 }; - Vector2 prevControlPosition = { 0 }; - - int textArrayPos = 0; - - const char *listData[3] = { "ONE", "TWO", "THREE" }; // ToggleGroup, ComboBox, DropdownBox default data - const char *listViewData[4] = { "WINDOWBOX", "GROUPBOX", "LINE", "PANEL" }; // ListView default data - - // Anchors control variables - AnchorPoint auxAnchor = { 9, 0, 0, 0 }; - bool anchorMode = false; - bool anchorLinkMode = false; - bool anchorLockMode = false; - bool anchorPosEditMode = false; - int selectedAnchor = -1; - int linkedAnchor = -1; - int storedAnchor = -1; - - // Help panel variables - int helpPositionX = -300; - int helpCounter = 0; - int helpStartPositionX = -300; - int helpDeltaPositionX = 0; - bool helpActive = false; - - // Rectangles used on controls preview drawing - Rectangle defaultRec[21] = { - (Rectangle){ 0, 0, 125, 50}, // WINDOWBOX - (Rectangle){ 0, 0, 125, 30}, // GROUPBOX - (Rectangle){ 0, 0, 125, 25 }, // LINE - (Rectangle){ 0, 0, 125, 35 }, // PANEL - (Rectangle){ 0, 0, 126, 25 }, // LABEL - (Rectangle){ 0, 0, 125, 30 }, // BUTTON - (Rectangle){ 0, 0, 90, 25 }, // TOGGLE - (Rectangle){ 0, 0, 125, 25 }, // TOGGLEGROUP - (Rectangle){ 0, 0, 15, 15}, // CHECKBOX - (Rectangle){ 0, 0, 125, 25 }, // COMBOBOX - (Rectangle){ 0, 0, 125, 25 }, // DROPDOWNBOX - (Rectangle){ 0, 0, 125, 25 }, // SPINNER - (Rectangle){ 0, 0, 125, 25 }, // VALUEBOX - (Rectangle){ 0, 0, 125, 25 }, // TEXTBOX - (Rectangle){ 0, 0, 125, 15 }, // SLIDER - (Rectangle){ 0, 0, 125, 15 }, // SLIDERBAR - (Rectangle){ 0, 0, 125, 15 }, // PROGRESSBAR - (Rectangle){ 0, 0, 125, 25 }, // STATUSBAR - (Rectangle){ 0, 0, 125, 75 }, // LISTVIEW - (Rectangle){ 0, 0, 95, 95 }, // COLORPICKER - (Rectangle){ 0, 0, 125, 30 } // DUMMYREC - }; - - // Initialize anchor points to default values - for (int i = 0; i < MAX_ANCHOR_POINTS; i++) - { - layout.anchors[i].id = i; - layout.anchors[i].x = 0; - layout.anchors[i].y = 0; - layout.anchors[i].enabled = false; - layout.anchors[i].hidding = false; - } - - layout.anchors[0].enabled = true; // Enable layout parent anchor (0, 0) - - // Initialize layout controls data - for (int i = 0; i < MAX_GUI_CONTROLS; i++) - { - layout.controls[i].id = 0; - layout.controls[i].type = 0; - layout.controls[i].rec = (Rectangle){ 0, 0, 0, 0 }; - memset(layout.controls[i].text, 0, MAX_CONTROL_TEXT_LENGTH); - memset(layout.controls[i].name, 0, MAX_CONTROL_NAME_LENGTH); - layout.controls[i].ap = &layout.anchors[0]; // By default, set parent anchor - } - - // Define palette variables - Rectangle palettePanel = { GetScreenWidth() + 130, 20, 135, 870 }; - bool paletteMode = false; - int paletteSelect = -1; - int paletteEasingIn = 0; - int paletteEasingOut = PALETTE_EASING_FRAMES; - int paletteStartPosX = GetScreenWidth() + 130; - - // Define palette rectangles - Rectangle paletteRecs[21] = { - (Rectangle){ palettePanel.x + 5, palettePanel.y + 5, 125, 50 }, // WindowBox - (Rectangle){ palettePanel.x + 5, palettePanel.y + 65, 125, 30 }, // GroupBox - (Rectangle){ palettePanel.x + 5, palettePanel.y + 105, 125, 25 }, // Line - (Rectangle){ palettePanel.x + 5, palettePanel.y + 140, 125, 35 }, // Panel - (Rectangle){ palettePanel.x + 5, palettePanel.y + 185, 126, 25 }, // Label - (Rectangle){ palettePanel.x + 5, palettePanel.y + 220, 125, 30 }, // Button - (Rectangle){ palettePanel.x + 5, palettePanel.y + 260, 90, 25 }, // Toggle - (Rectangle){ palettePanel.x + 5, palettePanel.y + 295, 125, 25 }, // ToggleGroup - (Rectangle){ palettePanel.x + 105, palettePanel.y + 265, 15, 15 }, // CheckBox - (Rectangle){ palettePanel.x + 5, palettePanel.y + 330, 125, 25 }, // ComboBox - (Rectangle){ palettePanel.x + 5, palettePanel.y + 365, 125, 25 }, // DropdownBox - (Rectangle){ palettePanel.x + 5, palettePanel.y + 400, 125, 25 }, // Spinner - (Rectangle){ palettePanel.x + 5, palettePanel.y + 435, 125, 25 }, // ValueBox - (Rectangle){ palettePanel.x + 5, palettePanel.y + 470, 125, 25 }, // TextBox - (Rectangle){ palettePanel.x + 5, palettePanel.y + 505, 125, 15 }, // Slider - (Rectangle){ palettePanel.x + 5, palettePanel.y + 530, 125, 15 }, // SliderBar - (Rectangle){ palettePanel.x + 5, palettePanel.y + 555, 125, 15 }, // ProgressBar - (Rectangle){ palettePanel.x + 5, palettePanel.y + 580, 125, 25 }, // StatusBar - (Rectangle){ palettePanel.x + 5, palettePanel.y + 615, 125, 75 }, // ListView - (Rectangle){ palettePanel.x + 5, palettePanel.y + 700, 95, 95 }, // ColorPicker - (Rectangle){ palettePanel.x + 5, palettePanel.y + 835, 125, 30 } // DummyRec - }; - - // Tracemap (background image for reference) variables - Texture2D tracemap = { 0 }; - Rectangle tracemapRec = { 0 }; - bool tracemapEditMode = false; - float tracemapFade = 0.5f; - - // loadedTexture for checking if texture is a tracemap or a style - Texture2D loadedTexture = { 0 }; - - // Very basic undo system - // Undo last-selected rectangle changes - // Undo text/name editing on cancel (KEY_ESC) - int undoSelectedControl = -1; - Rectangle undoLastRec; - char prevControlText[MAX_CONTROL_TEXT_LENGTH]; - char prevControlName[MAX_CONTROL_NAME_LENGTH]; - - // Close layout window variables - bool closingWindowActive = false; - - // Generate code options window variables - Vector2 exportWindowPos = { 50, 50 }; - bool generateWindowActive = false; - int toolNameSize = 32; - int toolVersionSize = 32; - int companySize = 32; - int toolDescriptionSize = 32; - - // Generate code configuration - GuiLayoutConfig config; - memset(&config, 0, sizeof(GuiLayoutConfig)); - config.width = 800; - config.height = 600; - strcpy(config.name, "layout_file_name"); - strcpy(config.version, "1.0-dev"); - strcpy(config.company, "raylib technologies"); - strcpy(config.description, "tool description"); - config.defineRecs = false; - config.exportAnchors = false; - config.exportAnchor0 = false; - config.fullComments = false; - config.defineTexts = false; - config.fullVariables = false; - - // Delete current layout and reset variables - bool resetWindowActive = false; - bool resetLayout = false; - - SetTargetFPS(120); - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!exitWindow) // Detect window close button or ESC key - { - // Update - //---------------------------------------------------------------------------------- - framesCounterSnap++; - mouse = GetMousePosition(); - - if (WindowShouldClose()) exitWindow = true; - - // Show save layout message window on ESC - if (IsKeyPressed(KEY_ESCAPE) && !textEditMode && !nameEditMode) - { - if (layout.controlsCount <= 0) exitWindow = true; - else if (generateWindowActive) generateWindowActive = false; - else if (resetWindowActive) resetWindowActive = false; - else - { - closingWindowActive = !closingWindowActive; - selectedControl = -1; - } - } - - // Enables or disables snapMode if not in textEditMode - if (IsKeyPressed(KEY_S) && (!textEditMode) && (!nameEditMode)) snapMode = !snapMode; - - // Enables or disables position reference information(anchor reference or global reference) - if (IsKeyPressed(KEY_F) && (!textEditMode) && (!nameEditMode)) controlGlobalPos = !controlGlobalPos; - - // Toggle help info - if (IsKeyPressed(KEY_TAB) && !helpActive) - { - helpStartPositionX = helpPositionX; - helpDeltaPositionX = 0 - helpStartPositionX; - helpCounter = 0; - helpActive = true; - } - else if (IsKeyPressed(KEY_TAB) && helpActive) - { - helpStartPositionX = helpPositionX; - helpDeltaPositionX = -300 - helpStartPositionX; - helpCounter = 0; - helpActive = false; - } - - if (helpActive) - { - helpCounter++; - if (helpCounter >= 60) helpCounter = 60; - helpPositionX = (int)EaseCubicInOut(helpCounter, helpStartPositionX, helpDeltaPositionX, 60); - } - else - { - helpCounter++; - if (helpCounter >= 60) helpCounter = 60; - helpPositionX = (int)EaseCubicInOut(helpCounter, helpStartPositionX, helpDeltaPositionX, 60); - } - - // Controls palette selector logic - if ((IsMouseButtonPressed(MOUSE_RIGHT_BUTTON)) && (!anchorMode) && (!paletteMode)) - { - paletteMode = true; - paletteEasingOut = 0; - } - else if ((IsMouseButtonPressed(MOUSE_RIGHT_BUTTON)) && (!anchorMode) && (paletteMode)) - { - paletteMode = false; - paletteEasingIn = 0; - } - - if (paletteMode) - { - paletteEasingIn++; - if (paletteEasingIn >= PALETTE_EASING_FRAMES) paletteEasingIn = PALETTE_EASING_FRAMES; - palettePanel.x = (int)EaseCubicInOut(paletteEasingIn, paletteStartPosX,(GetScreenWidth() - 145) - paletteStartPosX, PALETTE_EASING_FRAMES); - - for (int i = 0; i < 21; i++) - { - if (CheckCollisionPointRec(mouse, paletteRecs[i])) - { - paletteSelect = i; - if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) selectedType = i; - break; - } - else paletteSelect = -1; - } - } - else - { - paletteStartPosX = GetScreenWidth() + 130; - paletteEasingOut++; - if (paletteEasingOut >= PALETTE_EASING_FRAMES) paletteEasingOut = PALETTE_EASING_FRAMES; - palettePanel.x = (int)EaseCubicInOut(paletteEasingOut, (GetScreenWidth() - 145), paletteStartPosX - (GetScreenWidth() - 145), PALETTE_EASING_FRAMES); - } - - for (int i = 0; i < 21; i++) - { - if (i == 8) paletteRecs[i].x = palettePanel.x + 105; - else paletteRecs[i].x = palettePanel.x + 5; - } - - // Create new control - if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON) && (focusedControl == -1) && (selectedControl == -1) && !anchorMode && !tracemapEditMode && !closingWindowActive && !generateWindowActive && (!resetWindowActive) && !CheckCollisionPointRec(mouse, palettePanel)) - { - // Add new control (button) - layout.controls[layout.controlsCount].id = layout.controlsCount; - layout.controls[layout.controlsCount].type = selectedType; - layout.controls[layout.controlsCount].rec = (Rectangle){ mouse.x - defaultRec[selectedType].width/2, mouse.y - defaultRec[selectedType].height/2, defaultRec[selectedType].width, defaultRec[selectedType].height }; - if ((layout.controls[layout.controlsCount].type == LABEL) || (layout.controls[layout.controlsCount].type == TEXTBOX) || (layout.controls[layout.controlsCount].type == BUTTON) || (layout.controls[layout.controlsCount].type == TOGGLE) - || (layout.controls[layout.controlsCount].type == GROUPBOX) || (layout.controls[layout.controlsCount].type == WINDOWBOX) || (layout.controls[layout.controlsCount].type == STATUSBAR) || (layout.controls[layout.controlsCount].type == DUMMYREC)) strcpy(layout.controls[layout.controlsCount].text, "SAMPLE TEXT"); - strcpy(layout.controls[layout.controlsCount].name, FormatText("%s%03i", controlTypeNameLow[layout.controls[layout.controlsCount].type], layout.controlsCount)); - layout.controls[layout.controlsCount].ap = &layout.anchors[0]; // Default anchor point (0, 0) - - for (int i = 0; i < layout.controlsCount; i++) - { - if (CheckCollisionPointRec(mouse, (Rectangle){ layout.controls[i].ap->x + layout.controls[i].rec.x, layout.controls[i].ap->y + layout.controls[i].rec.y, layout.controls[i].rec.width, layout.controls[i].rec.height }) && layout.controls[i].type == WINDOWBOX) layout.controls[layout.controlsCount].ap = layout.controls[i].ap; - } - - if (layout.controls[layout.controlsCount].type == WINDOWBOX) - { - for (int i = 1; i < MAX_ANCHOR_POINTS; i++) - { - if (!layout.anchors[i].enabled) - { - layout.anchors[i].x = layout.controls[layout.controlsCount].rec.x; - layout.anchors[i].y = layout.controls[layout.controlsCount].rec.y; - - if (snapMode) - { - int offsetX = layout.anchors[i].x%GRID_LINE_SPACING; - int offsetY = layout.anchors[i].y%GRID_LINE_SPACING; - - if (offsetX >= GRID_LINE_SPACING/2) layout.anchors[i].x += (GRID_LINE_SPACING - offsetX); - else layout.anchors[i].x -= offsetX; - - if (offsetY >= GRID_LINE_SPACING/2) layout.anchors[i].y += (GRID_LINE_SPACING - offsetY); - else layout.anchors[i].y -= offsetY; - } - - layout.controls[layout.controlsCount].rec.x = layout.anchors[i].x; - layout.controls[layout.controlsCount].rec.y = layout.anchors[i].y; - - layout.anchors[i].enabled = true; - layout.controls[layout.controlsCount].ap = &layout.anchors[i]; - break; - } - } - } - - layout.controls[layout.controlsCount].rec.x -= layout.controls[layout.controlsCount].ap->x; - layout.controls[layout.controlsCount].rec.y -= layout.controls[layout.controlsCount].ap->y; - layout.controlsCount++; - } - else - { - if (!(controlDrag || tracemapEditMode || anchorLockMode || closingWindowActive || generateWindowActive || resetWindowActive)) - { - // Check selected control (on mouse hover) - for (int i = layout.controlsCount; i >= 0; i--) - { - if ((layout.controls[i].type == WINDOWBOX) && (!layout.controls[i].ap->hidding) && (CheckCollisionPointRec(mouse, (Rectangle){ layout.controls[i].ap->x + layout.controls[i].rec.x, layout.controls[i].ap->y + layout.controls[i].rec.y, layout.controls[i].rec.width, 24 }))) - { - focusedControl = i; - - if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON) && !anchorLinkMode && !anchorMode) - { - selectedControl = focusedControl; - } - - if (undoSelectedControl != focusedControl) - { - undoSelectedControl = focusedControl; - undoLastRec = layout.controls[i].rec; - } - break; - } - else if ((!layout.controls[i].ap->hidding) && (CheckCollisionPointRec(mouse, (Rectangle){ layout.controls[i].ap->x + layout.controls[i].rec.x, layout.controls[i].ap->y + layout.controls[i].rec.y, layout.controls[i].rec.width, layout.controls[i].rec.height }) && layout.controls[i].type != WINDOWBOX)) - { - focusedControl = i; - - if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON) && !anchorLinkMode && !anchorMode) - { - selectedControl = focusedControl; - } - - if (undoSelectedControl != focusedControl) - { - undoSelectedControl = focusedControl; - undoLastRec = layout.controls[i].rec; - } - break; - } - else - { - focusedControl = -1; - - if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) selectedControl = -1; - } - } - } - } - - // Change controls layer order (position inside array) - if (IsKeyDown(KEY_LEFT_ALT) && (focusedControl != -1)) - { - if ((IsKeyPressed(KEY_UP)) && (focusedControl < layout.controlsCount - 1)) - { - // Move control towards beginning of array - GuiControl auxControl = layout.controls[focusedControl]; - layout.controls[focusedControl] = layout.controls[focusedControl + 1]; - layout.controls[focusedControl].id -= 1; - layout.controls[focusedControl + 1] = auxControl; - layout.controls[focusedControl + 1].id += 1; - selectedControl = -1; - } - else if ((IsKeyPressed(KEY_DOWN)) && (focusedControl > 0)) - { - // Move control towards end of array - GuiControl auxControl = layout.controls[focusedControl]; - layout.controls[focusedControl] = layout.controls[focusedControl - 1]; - layout.controls[focusedControl].id += 1; - layout.controls[focusedControl - 1] = auxControl; - layout.controls[focusedControl - 1].id -= 1; - selectedControl = -1; - } - } - - - - if (selectedControl != -1 && !textEditMode && !nameEditMode && !anchorMode) - { - if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) - { - controlDrag = true; - panControlOffset = mouse; - prevControlPosition = (Vector2){ layout.controls[selectedControl].rec.x, layout.controls[selectedControl].rec.y }; - } - else if (IsMouseButtonReleased(MOUSE_LEFT_BUTTON)) - { - controlDrag = false; - } - - if (controlDrag) - { - layout.controls[selectedControl].rec.x = prevControlPosition.x + (mouse.x - panControlOffset.x); - layout.controls[selectedControl].rec.y = prevControlPosition.y + (mouse.y - panControlOffset.y); - - // Snap to grid position and size - if (snapMode) - { - // Snap rectangle position to closer snap point - int offsetX = (int)layout.controls[selectedControl].rec.x%GRID_LINE_SPACING; - int offsetY = (int)layout.controls[selectedControl].rec.y%GRID_LINE_SPACING; - - if (offsetX >= GRID_LINE_SPACING/2) layout.controls[selectedControl].rec.x += (GRID_LINE_SPACING - offsetX); - else layout.controls[selectedControl].rec.x -= offsetX; - - if (offsetY >= GRID_LINE_SPACING/2) layout.controls[selectedControl].rec.y += (GRID_LINE_SPACING - offsetY); - else layout.controls[selectedControl].rec.y -= offsetY; - } - } - - if (!IsKeyDown(KEY_LEFT_ALT) && (selectedControl != -1)) - { - if (snapMode) - { - if (IsKeyDown(KEY_LEFT_CONTROL)) - { - // Control modifier of width and height - if (IsKeyDown(KEY_LEFT_SHIFT)) - { - if (IsKeyPressed(KEY_RIGHT)) layout.controls[selectedControl].rec.width += GRID_LINE_SPACING; - else if (IsKeyPressed(KEY_LEFT)) layout.controls[selectedControl].rec.width -= GRID_LINE_SPACING; - - if (IsKeyPressed(KEY_UP)) layout.controls[selectedControl].rec.height -= GRID_LINE_SPACING; - else if (IsKeyPressed(KEY_DOWN)) layout.controls[selectedControl].rec.height += GRID_LINE_SPACING; - } - else - { - if (IsKeyDown(KEY_RIGHT) && ((framesCounterSnap%MOVEMENT_FRAME_SPEED) == 0)) layout.controls[selectedControl].rec.width += GRID_LINE_SPACING; - else if (IsKeyDown(KEY_LEFT) && ((framesCounterSnap%MOVEMENT_FRAME_SPEED) == 0)) layout.controls[selectedControl].rec.width -= GRID_LINE_SPACING; - - if (IsKeyDown(KEY_UP) && ((framesCounterSnap%MOVEMENT_FRAME_SPEED) == 0)) layout.controls[selectedControl].rec.height -= GRID_LINE_SPACING; - else if (IsKeyDown(KEY_DOWN) && ((framesCounterSnap%MOVEMENT_FRAME_SPEED) == 0)) layout.controls[selectedControl].rec.height += GRID_LINE_SPACING; - } - } - else - { - // Control modifier of position - if (IsKeyDown(KEY_LEFT_SHIFT)) - { - if (IsKeyPressed(KEY_RIGHT)) layout.controls[selectedControl].rec.x += GRID_LINE_SPACING; - else if (IsKeyPressed(KEY_LEFT)) layout.controls[selectedControl].rec.x -= GRID_LINE_SPACING; - - if (IsKeyPressed(KEY_UP)) layout.controls[selectedControl].rec.y -= GRID_LINE_SPACING; - else if (IsKeyPressed(KEY_DOWN)) layout.controls[selectedControl].rec.y += GRID_LINE_SPACING; - } - else - { - if (IsKeyDown(KEY_RIGHT) && ((framesCounterSnap%MOVEMENT_FRAME_SPEED) == 0)) layout.controls[selectedControl].rec.x += GRID_LINE_SPACING; - else if (IsKeyDown(KEY_LEFT) && ((framesCounterSnap%MOVEMENT_FRAME_SPEED) == 0)) layout.controls[selectedControl].rec.x -= GRID_LINE_SPACING; - - if (IsKeyDown(KEY_UP) && ((framesCounterSnap%MOVEMENT_FRAME_SPEED) == 0)) layout.controls[selectedControl].rec.y -= GRID_LINE_SPACING; - else if (IsKeyDown(KEY_DOWN) && ((framesCounterSnap%MOVEMENT_FRAME_SPEED) == 0)) layout.controls[selectedControl].rec.y += GRID_LINE_SPACING; - } - - } - } - else - { - if (IsKeyDown(KEY_LEFT_CONTROL)) - { - // Control modifier for a more precise sizing - if (IsKeyDown(KEY_LEFT_SHIFT)) - { - // Control modifier of position - if (IsKeyPressed(KEY_RIGHT)) layout.controls[selectedControl].rec.width++; - else if (IsKeyPressed(KEY_LEFT)) layout.controls[selectedControl].rec.width--; - - if (IsKeyPressed(KEY_UP)) layout.controls[selectedControl].rec.height--; - else if (IsKeyPressed(KEY_DOWN)) layout.controls[selectedControl].rec.height++; - } - else - { - if (IsKeyDown(KEY_RIGHT)) layout.controls[selectedControl].rec.width++; - else if (IsKeyDown(KEY_LEFT)) layout.controls[selectedControl].rec.width--; - - if (IsKeyDown(KEY_UP)) layout.controls[selectedControl].rec.height--; - else if (IsKeyDown(KEY_DOWN)) layout.controls[selectedControl].rec.height++; - } - } - else - { - if (IsKeyDown(KEY_LEFT_SHIFT)) - { - // Control modifier for a more precise sizing - if (IsKeyPressed(KEY_RIGHT)) layout.controls[selectedControl].rec.x++; - else if (IsKeyPressed(KEY_LEFT)) layout.controls[selectedControl].rec.x--; - - if (IsKeyPressed(KEY_UP)) layout.controls[selectedControl].rec.y--; - else if (IsKeyPressed(KEY_DOWN)) layout.controls[selectedControl].rec.y++; - } - else - { - if (IsKeyDown(KEY_RIGHT)) layout.controls[selectedControl].rec.x++; - else if (IsKeyDown(KEY_LEFT)) layout.controls[selectedControl].rec.x--; - - if (IsKeyDown(KEY_UP)) layout.controls[selectedControl].rec.y--; - else if (IsKeyDown(KEY_DOWN)) layout.controls[selectedControl].rec.y++; - } - } - } - } - - // Unlinks the control selected from its current anchor - if (IsKeyPressed(KEY_U)) - { - layout.controls[selectedControl].rec.x += layout.controls[selectedControl].ap->x; - layout.controls[selectedControl].rec.y += layout.controls[selectedControl].ap->y; - layout.controls[selectedControl].ap = &layout.anchors[0]; - } - } - - // Updates the selectedType with the MouseWheel - selectedType -= GetMouseWheelMove(); - - if (selectedType < WINDOWBOX) selectedType = WINDOWBOX; - else if (selectedType > DUMMYREC) selectedType = DUMMYREC; - - selectedTypeDraw = selectedType; - - if (focusedControl != -1) - { - // Delete focused control and shift array position - if (IsKeyPressed(KEY_DELETE)) - { - for (int i = focusedControl; i < layout.controlsCount; i++) - { - layout.controls[i].type = layout.controls[i + 1].type; - layout.controls[i].rec = layout.controls[i + 1].rec; - memset(layout.controls[i].text, 0, MAX_CONTROL_TEXT_LENGTH); - memset(layout.controls[i].name, 0, MAX_CONTROL_NAME_LENGTH); - strcpy(layout.controls[i].text, layout.controls[i + 1].text); - strcpy(layout.controls[i].name, layout.controls[i + 1].name); - layout.controls[i].ap = layout.controls[i + 1].ap; - } - - layout.controlsCount--; - focusedControl = -1; - selectedControl = -1; - } - } - - // Updates the defaultRec[selectedType] position - defaultRec[selectedType].x = mouse.x - defaultRec[selectedType].width/2; - defaultRec[selectedType].y = mouse.y - defaultRec[selectedType].height/2; - - // Mouse snap - // NOTE: Snap point changes when GRID_LINE_SPACING/2 has been surpassed in X and Y - if ((snapMode) && (selectedControl == -1)) - { - int offsetX = (int)mouse.x%GRID_LINE_SPACING; - int offsetY = (int)mouse.y%GRID_LINE_SPACING; - - if (offsetX >= GRID_LINE_SPACING/2) mouse.x += (GRID_LINE_SPACING - offsetX); - else mouse.x -= offsetX; - - if (offsetY >= GRID_LINE_SPACING/2) mouse.y += (GRID_LINE_SPACING - offsetY); - else mouse.y -= offsetY; - - // SnapMode of the DrawingControls - // Snap rectangle position to closer snap point - offsetX = (int)defaultRec[selectedType].x%GRID_LINE_SPACING; - offsetY = (int)defaultRec[selectedType].y%GRID_LINE_SPACING; - - if (offsetX >= GRID_LINE_SPACING/2) defaultRec[selectedType].x += (GRID_LINE_SPACING - offsetX); - else defaultRec[selectedType].x -= offsetX; - - if (offsetY >= GRID_LINE_SPACING/2) defaultRec[selectedType].y += (GRID_LINE_SPACING - offsetY); - else defaultRec[selectedType].y -= offsetY; - } - - // Resize the controller aplying the snap - if ((IsKeyDown(KEY_LEFT_CONTROL)) && (!textEditMode) && (!nameEditMode) && (IsKeyPressed(KEY_R)) && (selectedControl != -1)) - { - int offsetX = (int)layout.controls[selectedControl].rec.width%GRID_LINE_SPACING; - int offsetY = (int)layout.controls[selectedControl].rec.height%GRID_LINE_SPACING; - - if (offsetX >= GRID_LINE_SPACING/2) layout.controls[selectedControl].rec.width += (GRID_LINE_SPACING - offsetX); - else layout.controls[selectedControl].rec.width -= offsetX; - - if (offsetY >= GRID_LINE_SPACING/2) layout.controls[selectedControl].rec.height += (GRID_LINE_SPACING - offsetY); - else layout.controls[selectedControl].rec.height -= offsetY; - } - - // Check if control has text to edit - if (textEditMode) - { - // Locks the selectedControl for text editing - selectedControl = storedControl; - int key = GetKeyPressed(); - int keyCount = strlen(layout.controls[selectedControl].text); // Keeps track of text length - - if (IsKeyPressed(KEY_LEFT)) textArrayPos--; - else if (IsKeyPressed(KEY_RIGHT)) textArrayPos++; - - if (textArrayPos >= 0) textArrayPos = 0; - else if (textArrayPos <= keyCount*(-1)) textArrayPos = keyCount*(-1); - - // Replaces characters with pressed keys or '\0' in case of backspace - // NOTE: Only allow keys in range [32..125] - if (((key >= 32) && (key <= 125)) && (keyCount < MAX_CONTROL_TEXT_LENGTH - 1)) - { - for (int i = keyCount; i > keyCount + textArrayPos; i--) - { - layout.controls[selectedControl].text[i] = layout.controls[selectedControl].text[i - 1]; - } - layout.controls[selectedControl].text[keyCount + textArrayPos] = (unsigned char)key; - } - - if ((textArrayPos == 0)) - { - if ((keyCount > 0) && IsKeyPressed(KEY_BACKSPACE_TEXT)) - { - layout.controls[selectedControl].text[keyCount - 1] = '\0'; - framesCounterSnap = 0; - if (keyCount < 0) keyCount = 0; - } - else if ((keyCount > 0) && IsKeyDown(KEY_BACKSPACE_TEXT)) - { - if ((framesCounterSnap > 60) && ((framesCounterSnap%4) == 0)) layout.controls[selectedControl].text[keyCount - 1] = '\0'; - if (keyCount < 0) keyCount = 0; - } - } - else if(textArrayPos*(-1) != keyCount) - { - if ((keyCount > 0) && IsKeyPressed(KEY_BACKSPACE_TEXT)) - { - framesCounterSnap = 0; - for (int i = -1; i <= -textArrayPos; i++) - { - layout.controls[selectedControl].text[keyCount + textArrayPos + i] = layout.controls[selectedControl].text[keyCount + textArrayPos + i + 1]; - if (i == -textArrayPos) layout.controls[selectedControl].text[keyCount - 1] = '\0'; - } - } - else if ((keyCount > 0) && IsKeyDown(KEY_BACKSPACE_TEXT)) - { - if ((framesCounterSnap > 60) && ((framesCounterSnap%4) == 0)) - { - for (int i = -1; i <= -textArrayPos; i++) - { - layout.controls[selectedControl].text[keyCount + textArrayPos + i] = layout.controls[selectedControl].text[keyCount + textArrayPos + i + 1]; - if (i == -textArrayPos) layout.controls[selectedControl].text[keyCount - 1] = '\0'; - } - } - } - } - - // Used to show the cursor('|') in textEditMode - if (keyCount < MAX_CONTROL_TEXT_LENGTH) framesCounter++; - else if (keyCount == MAX_CONTROL_TEXT_LENGTH) framesCounter = 21; - } - - if ((nameEditMode)) - { - // Locks the selectedControl for text editing - selectedControl = storedControl; - int key = GetKeyPressed(); - int keyCount = strlen(layout.controls[selectedControl].name); // Keeps track of name length - - // Replaces characters with pressed keys or '\0' in case of backspace - // NOTE: Only allow keys in range [48..57], [65..90] and [97..122] - if ((((key >= 48) && (key <= 57)) || ((key >= 65) && (key <= 90)) || ((key >= 97) && (key <= 122))) && (keyCount < MAX_CONTROL_NAME_LENGTH - 1)) - { - layout.controls[selectedControl].name[keyCount] = (unsigned char)key; - } - - if ((keyCount > 0) && IsKeyPressed(KEY_BACKSPACE_TEXT)) - { - layout.controls[selectedControl].name[keyCount - 1] = '\0'; - if (keyCount < 0) keyCount = 0; - } - - // Used to show the cursor('|') in textEditMode - if (keyCount < MAX_CONTROL_NAME_LENGTH) framesCounter++; - else if (keyCount == MAX_CONTROL_NAME_LENGTH) framesCounter = 21; - } - - // Turns off textEditMode - if (textEditMode && IsKeyPressed(KEY_ENTER)) - { - textEditMode = false; - framesCounter = 0; - } - else if (textEditMode && IsKeyPressed(KEY_ESCAPE)) - { - textEditMode = false; - memset(layout.controls[selectedControl].text, 0, MAX_CONTROL_TEXT_LENGTH); - strcpy(layout.controls[selectedControl].text, prevControlText); - framesCounter = 0; - } - - if (nameEditMode && IsKeyPressed(KEY_ENTER)) - { - nameEditMode = false; - framesCounter = 0; - } - else if (nameEditMode && IsKeyPressed(KEY_ESCAPE)) - { - nameEditMode = false; - memset(layout.controls[selectedControl].name, 0, MAX_CONTROL_NAME_LENGTH); - strcpy(layout.controls[selectedControl].name, prevControlName); - framesCounter = 0; - } - - // Turns on textEditMode - if (IsKeyPressed(KEY_T) && !nameEditMode && (selectedControl != -1) && (!generateWindowActive) && (!anchorMode) && - ((layout.controls[selectedControl].type == LABEL) || (layout.controls[selectedControl].type == CHECKBOX) || (layout.controls[selectedControl].type == SLIDERBAR) || (layout.controls[selectedControl].type == SLIDER) || (layout.controls[selectedControl].type == TEXTBOX) || (layout.controls[selectedControl].type == BUTTON) || (layout.controls[selectedControl].type == TOGGLE) || (layout.controls[selectedControl].type == GROUPBOX) || (layout.controls[selectedControl].type == WINDOWBOX) || (layout.controls[selectedControl].type == STATUSBAR) || (layout.controls[selectedControl].type == DUMMYREC))) - { - textEditMode = true; - textArrayPos = 0; - storedControl = selectedControl; - strcpy(prevControlText, layout.controls[selectedControl].text); - } - - // Turns on NameEditMode - if (IsKeyPressed(KEY_N) && (!IsKeyDown(KEY_LEFT_CONTROL)) && (!resetWindowActive) && !textEditMode && (selectedControl != -1) && (!generateWindowActive)) - { - nameEditMode = true; - strcpy(prevControlName, layout.controls[selectedControl].name); - storedControl = selectedControl; - } - - // Checks if mouse is over an anchor - if (!(anchorLinkMode || controlDrag || anchorLockMode)) - { - for (int i = 1; i < MAX_ANCHOR_POINTS; i++) - { - if (CheckCollisionPointCircle(mouse, (Vector2){ layout.anchors[i].x, layout.anchors[i].y }, ANCHOR_RADIUS)) - { - selectedAnchor = i; - if (layout.anchors[selectedAnchor].enabled) anchorMode = true; - break; - } - else - { - selectedAnchor = -1; - if (!IsKeyDown(KEY_A)) anchorMode = false; - } - } - } - - // Selected control lock logic - if (anchorLockMode) - { - selectedAnchor = storedAnchor; - anchorMode = true; - - if (snapMode) - { - if (IsKeyDown(KEY_LEFT_SHIFT)) - { - if (IsKeyPressed(KEY_RIGHT)) layout.anchors[selectedAnchor].x+= GRID_LINE_SPACING; - else if (IsKeyPressed(KEY_LEFT)) layout.anchors[selectedAnchor].x-= GRID_LINE_SPACING; - - if (IsKeyPressed(KEY_UP)) layout.anchors[selectedAnchor].y-= GRID_LINE_SPACING; - else if (IsKeyPressed(KEY_DOWN)) layout.anchors[selectedAnchor].y+= GRID_LINE_SPACING; - } - else - { - if (IsKeyDown(KEY_RIGHT) && ((framesCounterSnap%MOVEMENT_FRAME_SPEED) == 0)) layout.anchors[selectedAnchor].x+= GRID_LINE_SPACING; - else if (IsKeyDown(KEY_LEFT) && ((framesCounterSnap%MOVEMENT_FRAME_SPEED) == 0)) layout.anchors[selectedAnchor].x-= GRID_LINE_SPACING; - - if (IsKeyDown(KEY_UP) && ((framesCounterSnap%MOVEMENT_FRAME_SPEED) == 0)) layout.anchors[selectedAnchor].y-= GRID_LINE_SPACING; - else if (IsKeyDown(KEY_DOWN) && ((framesCounterSnap%MOVEMENT_FRAME_SPEED) == 0)) layout.anchors[selectedAnchor].y+= GRID_LINE_SPACING; - } - } - else - { - if (IsKeyDown(KEY_LEFT_SHIFT)) - { - if (IsKeyPressed(KEY_RIGHT)) layout.anchors[selectedAnchor].x++; - else if (IsKeyPressed(KEY_LEFT)) layout.anchors[selectedAnchor].x--; - - if (IsKeyPressed(KEY_UP)) layout.anchors[selectedAnchor].y--; - else if (IsKeyPressed(KEY_DOWN)) layout.anchors[selectedAnchor].y++; - } - else - { - if (IsKeyDown(KEY_RIGHT)) layout.anchors[selectedAnchor].x++; - else if (IsKeyDown(KEY_LEFT)) layout.anchors[selectedAnchor].x--; - - if (IsKeyDown(KEY_UP)) layout.anchors[selectedAnchor].y--; - else if (IsKeyDown(KEY_DOWN)) layout.anchors[selectedAnchor].y++; - } - } - } - - // Create and edit anchor points - if (anchorMode && (!generateWindowActive) && (!resetWindowActive) && (!closingWindowActive)) - { - // On mouse click anchor is created - if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON) && (selectedAnchor == -1) && (selectedControl == -1)) - { - for (int i = 1; i < MAX_ANCHOR_POINTS; i++) - { - if (!layout.anchors[i].enabled) - { - layout.anchors[i].x = mouse.x; - layout.anchors[i].y = mouse.y; - layout.anchors[i].enabled = true; - anchorMode = false; - break; - } - } - } - - if (IsKeyPressed(KEY_SPACE) && !nameEditMode && !textEditMode && (selectedAnchor != -1) && !anchorLockMode && anchorMode) - { - anchorLockMode = true; - storedAnchor = selectedAnchor; - } - else if (IsKeyPressed(KEY_SPACE) && (selectedAnchor != -1)) anchorLockMode = false; - - if (selectedAnchor > 0) - { - // Unlinks and deletes the selected anchor point - if (IsKeyPressed(KEY_DELETE) && (!anchorLinkMode)) - { - for (int i = 0; i < layout.controlsCount; i++) - { - if (layout.controls[i].ap->id == selectedAnchor) - { - layout.controls[i].rec.x += layout.controls[i].ap->x; - layout.controls[i].rec.y += layout.controls[i].ap->y; - layout.controls[i].ap = &layout.anchors[0]; - } - } - layout.anchors[selectedAnchor].x = 0; - layout.anchors[selectedAnchor].y = 0; - layout.anchors[selectedAnchor].enabled = false; - layout.anchors[selectedAnchor].hidding = false; - anchorMode = false; - anchorLockMode = false; - } - - if (!anchorLockMode && (!anchorLinkMode)) - { - // Allows to drag an anchor without losing collision - if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON) && IsKeyDown(KEY_A)) - { - controlDrag = true; - anchorPosEditMode = true; - - for (int i = 0; i < layout.controlsCount; i++) - { - if (layout.controls[i].ap->id == selectedAnchor) - { - layout.controls[i].rec.x += layout.controls[i].ap->x; - layout.controls[i].rec.y += layout.controls[i].ap->y; - layout.controls[i].ap = &auxAnchor; - } - } - } - else if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) controlDrag = true; - - if (IsMouseButtonReleased(MOUSE_LEFT_BUTTON)) - { - if (anchorPosEditMode) - { - for (int i = 0; i < layout.controlsCount; i++) - { - if (layout.controls[i].ap->id == 9) - { - layout.controls[i].rec.x += layout.controls[i].ap->x; - layout.controls[i].rec.y += layout.controls[i].ap->y; - layout.controls[i].ap = &layout.anchors[selectedAnchor]; - layout.controls[i].rec.x -= layout.anchors[selectedAnchor].x; - layout.controls[i].rec.y -= layout.anchors[selectedAnchor].y; - } - } - - anchorPosEditMode = false; - } - - controlDrag = false; - selectedAnchor = -1; - anchorMode = false; - } - - // Moves the anchor to the mouse position - if (controlDrag) - { - layout.anchors[selectedAnchor].x = mouse.x; - layout.anchors[selectedAnchor].y = mouse.y; - } - } - - // Enables the linking between anchor and control - if (IsMouseButtonPressed(MOUSE_RIGHT_BUTTON)) - { - linkedAnchor = selectedAnchor; - anchorLinkMode = true; - } - - // Links the selected control to the current anchor - if (IsMouseButtonReleased(MOUSE_RIGHT_BUTTON)) - { - if (focusedControl != -1) - { - layout.controls[focusedControl].rec.x += layout.controls[focusedControl].ap->x; - layout.controls[focusedControl].rec.y += layout.controls[focusedControl].ap->y; - layout.controls[focusedControl].ap = &layout.anchors[linkedAnchor]; - layout.controls[focusedControl].rec.x -= layout.anchors[linkedAnchor].x; - layout.controls[focusedControl].rec.y -= layout.anchors[linkedAnchor].y; - } - - anchorLinkMode = false; - anchorMode = false; - } - - // Hide/Unhide selected anchor linked controls - if (IsKeyPressed(KEY_H) && (!anchorLinkMode)) layout.anchors[selectedAnchor].hidding = !layout.anchors[selectedAnchor].hidding; - } - } - - // Enable anchor mode editing - if (IsKeyDown(KEY_A) && !nameEditMode && !textEditMode && (layout.controls[selectedControl].type != TEXTBOX)) anchorMode = true; - - // Checks the minimum size of the rec - if (selectedControl != -1) - { - // Sets the minimum limit of the width - if (layout.controls[selectedControl].type == LABEL || layout.controls[selectedControl].type == BUTTON || layout.controls[selectedControl].type == TOGGLE || layout.controls[selectedControl].type == TEXTBOX) - { - if (layout.controls[selectedControl].rec.width < MeasureText(layout.controls[selectedControl].text , style[DEFAULT_TEXT_SIZE])) layout.controls[selectedControl].rec.width = MeasureText(layout.controls[selectedControl].text , style[DEFAULT_TEXT_SIZE]); - } - else if (layout.controls[selectedControl].type == WINDOWBOX || layout.controls[selectedControl].type == GROUPBOX || layout.controls[selectedControl].type == STATUSBAR) - { - if (layout.controls[selectedControl].rec.width < MeasureText(layout.controls[selectedControl].text, style[DEFAULT_TEXT_SIZE]) + 31) layout.controls[selectedControl].rec.width = MeasureText(layout.controls[selectedControl].text , style[DEFAULT_TEXT_SIZE]) + 31; - } - else if (layout.controls[selectedControl].type == CHECKBOX) - { - if (layout.controls[selectedControl].rec.width <= 10) layout.controls[selectedControl].rec.width = 10; - } - else if (layout.controls[selectedControl].rec.width <= 20) layout.controls[selectedControl].rec.width = 20; - - // Sets the minimum limit of the height - if (layout.controls[selectedControl].type == WINDOWBOX) - { - if (layout.controls[selectedControl].rec.height < 50) layout.controls[selectedControl].rec.height = 50; - } - else if (layout.controls[selectedControl].type == PROGRESSBAR || layout.controls[selectedControl].type == SLIDER || layout.controls[selectedControl].type == SLIDERBAR || layout.controls[selectedControl].type == CHECKBOX || layout.controls[selectedControl].type == LINE) - { - if (layout.controls[selectedControl].rec.height <= 10 ) layout.controls[selectedControl].rec.height = 10; - } - else if (layout.controls[selectedControl].rec.height <= 20) layout.controls[selectedControl].rec.height = 20; - } - - // Shows or hides the grid - if (IsKeyPressed(KEY_G) && (!nameEditMode) && (!textEditMode) && (!generateWindowActive)) showGrid = !showGrid; - - // Drop files logic - if (IsFileDropped()) - { - int fileCount = 0; - char **droppedFiles = { 0 }; - char droppedFileName[256]; - droppedFiles = GetDroppedFiles(&fileCount); - strcpy(droppedFileName, droppedFiles[0]); - - if (IsFileExtension(droppedFileName, ".rgl")) - { - selectedControl = -1; - LoadLayoutRGL(droppedFileName); - strcpy(loadedFileName, droppedFileName); - SetWindowTitle(FormatText("rGuiLayout v1.1 - %s", GetFileName(loadedFileName))); - } - else if (IsFileExtension(droppedFileName, ".rgs")) GuiLoadStyle(droppedFileName); - else if (IsFileExtension(droppedFileName, ".png")) - { - if (loadedTexture.id > 0) UnloadTexture(loadedTexture); - loadedTexture = LoadTexture(droppedFileName); - - if (loadedTexture.width == 64 && loadedTexture.height == 16) GuiLoadStyleImage(droppedFileName); - else - { - if (tracemap.id > 0) UnloadTexture(tracemap); - tracemap = LoadTexture(droppedFileName); - } - - UnloadTexture(loadedTexture); - - SetTextureFilter(tracemap, FILTER_BILINEAR); - - tracemapRec.width = tracemap.width; - tracemapRec.height = tracemap.height; - } - - ClearDroppedFiles(); - } - - // Duplicate selected control - if ((IsKeyDown(KEY_LEFT_CONTROL) && IsKeyPressed(KEY_D)) && (selectedControl != -1) && !anchorMode) - { - // Add a copy of selected control - layout.controls[layout.controlsCount].id = layout.controlsCount; - layout.controls[layout.controlsCount].type = layout.controls[selectedControl].type; - layout.controls[layout.controlsCount].rec = layout.controls[selectedControl].rec; - layout.controls[layout.controlsCount].rec.x += 10; - layout.controls[layout.controlsCount].rec.y += 10; - strcpy(layout.controls[layout.controlsCount].text, layout.controls[selectedControl].text); - strcpy(layout.controls[layout.controlsCount].name, FormatText("%s%03i", controlTypeNameLow[layout.controls[layout.controlsCount].type], layout.controlsCount)); - layout.controls[layout.controlsCount].ap = layout.controls[selectedControl].ap; // Default anchor point (0, 0) - - layout.controlsCount++; - } - - // Save layout file dialog logic - if (IsKeyDown(KEY_LEFT_CONTROL) && IsKeyDown(KEY_LEFT_SHIFT) && IsKeyPressed(KEY_S)) ShowSaveLayoutDialog(); - else if (IsKeyDown(KEY_LEFT_CONTROL) && IsKeyPressed(KEY_S)) - { - if (loadedFileName[0] == '\0') ShowSaveLayoutDialog(); - else SaveLayoutRGL(loadedFileName, false); - } - - // Open laout file dialog logic - if (IsKeyDown(KEY_LEFT_CONTROL) && IsKeyPressed(KEY_O)) - { - // Open file dialog - const char *filters[] = { "*.rgl" }; - const char *fileName = tinyfd_openFileDialog("Load raygui layout file", "", 1, filters, "raygui Layout Files (*.rgl)", 0); - - if (fileName != NULL) LoadLayoutRGL(fileName); - } - - // Activate code generation export window - if (IsKeyDown(KEY_LEFT_CONTROL) && IsKeyPressed(KEY_ENTER) && !closingWindowActive) generateWindowActive = true; - - if (generateWindowActive) // Keep window in the middle of screen - { - exportWindowPos.x = GetScreenWidth()/2 - 200; - exportWindowPos.y = GetScreenHeight()/2 - 112; - } - - // Tracemap texture control logic - if (tracemap.id > 0) - { - // Toggles Texture editting mode between true or false - if (IsKeyDown(KEY_LEFT_CONTROL) && IsKeyPressed(KEY_T)) tracemapEditMode = !tracemapEditMode; - - if (tracemapEditMode) - { - int offsetX = (int)mouse.x%GRID_LINE_SPACING; - int offsetY = (int)mouse.y%GRID_LINE_SPACING; - - // Moves the texture with the mouse - if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) - { - panControlOffset = mouse; - prevControlPosition = (Vector2){ tracemapRec.x, tracemapRec.y }; - } - - if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) - { - tracemapRec.x = prevControlPosition.x + (mouse.x - panControlOffset.x); - tracemapRec.y = prevControlPosition.y + (mouse.y - panControlOffset.y); - - if (snapMode) - { - if (offsetX >= GRID_LINE_SPACING/2) mouse.x += (GRID_LINE_SPACING - offsetX); - else mouse.x -= offsetX; - - if (offsetY >= GRID_LINE_SPACING/2) mouse.y += (GRID_LINE_SPACING - offsetY); - else mouse.y -= offsetY; - - offsetX = (int)tracemapRec.x%GRID_LINE_SPACING; - offsetY = (int)tracemapRec.y%GRID_LINE_SPACING; - - if (offsetX >= GRID_LINE_SPACING/2) tracemapRec.x += (GRID_LINE_SPACING - offsetX); - else tracemapRec.x -= offsetX; - - if (offsetY >= GRID_LINE_SPACING/2) tracemapRec.y += (GRID_LINE_SPACING - offsetY); - else tracemapRec.y -= offsetY; - } - } - - // Moves and scales the texture with snap. - if (IsKeyDown(KEY_LEFT_CONTROL)) - { - tracemapRec.height -= GetMouseWheelMove(); - tracemapRec.width -= GetMouseWheelMove(); - } - else - { - tracemapRec.height -= 10*GetMouseWheelMove(); - tracemapRec.width -= 10*GetMouseWheelMove(); - } - - tracemap.height = tracemapRec.height; - tracemap.width = tracemapRec.width; - - // Change texture fade - if (IsKeyDown(KEY_LEFT_CONTROL)) - { - if (IsKeyDown(KEY_LEFT_SHIFT)) - { - if (IsKeyPressed(KEY_LEFT)) tracemapRec.x--; - else if (IsKeyPressed(KEY_RIGHT)) tracemapRec.x++; - - if (IsKeyPressed(KEY_UP)) tracemapRec.y--; - else if (IsKeyPressed(KEY_DOWN)) tracemapRec.y++; - } - else - { - if (IsKeyDown(KEY_LEFT)) tracemapRec.x--; - else if (IsKeyDown(KEY_RIGHT)) tracemapRec.x++; - - if (IsKeyDown(KEY_UP)) tracemapRec.y--; - else if (IsKeyDown(KEY_DOWN)) tracemapRec.y++; - } - } - else - { - if (IsKeyDown(KEY_LEFT)) tracemapFade-= 0.01f; - else if (IsKeyDown(KEY_RIGHT)) tracemapFade+=0.01f; - } - - if (tracemapFade < 0) tracemapFade = 0; - else if (tracemapFade > 1) tracemapFade = 1; - - // Deletes the texture and resets it - if (IsKeyPressed(KEY_DELETE)) - { - UnloadTexture(tracemap); - tracemap.id = 0; - tracemapEditMode = false; - tracemapRec.x = 0; - tracemapRec.y = 0; - } - } - } - - if ((IsKeyDown(KEY_LEFT_CONTROL)) && (IsKeyPressed(KEY_Z))) layout.controls[undoSelectedControl].rec = undoLastRec; - - if ((IsKeyDown(KEY_LEFT_CONTROL)) && (IsKeyPressed(KEY_N)) && (!generateWindowActive) && (!closingWindowActive)) - { - resetWindowActive = true; - resetLayout = false; - } - - if (resetWindowActive && resetLayout) - { - // Resets all controls to default values - for (int i = selectedControl; i < layout.controlsCount; i++) - { - layout.controls[i].id = 0; - layout.controls[i].type = 0; - layout.controls[i].rec = (Rectangle){ 0, 0, 0, 0 }; - memset(layout.controls[i].text, 0, MAX_CONTROL_TEXT_LENGTH); - memset(layout.controls[i].name, 0, MAX_CONTROL_NAME_LENGTH); - layout.controls[i].ap = &layout.anchors[0]; // By default, set parent anchor - } - - // Resets anchor points to default values - for (int i = 0; i < MAX_ANCHOR_POINTS; i++) - { - layout.anchors[i].x = 0; - layout.anchors[i].y = 0; - layout.anchors[i].enabled = false; - layout.anchors[i].hidding = false; - } - - SetWindowTitle("rGuiLayout v1.1"); - strcpy(loadedFileName, "\0"); - layout.controlsCount = 0; - resetWindowActive = false; - } - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - // TODO: Draw global app screen limits (black rectangle with black default anchor) - - if (showGrid) GuiGrid((Rectangle){ 0, 0, GetScreenWidth(), GetScreenHeight() }, GRID_LINE_SPACING, 5, false); - - // Draw the texture if loaded - if (tracemap.id > 0) - { - DrawTexture(tracemap, tracemapRec.x, tracemapRec.y, Fade(WHITE, tracemapFade)); - - // Draw the tracemap rectangle - if (tracemapEditMode) DrawRectangleLines(tracemapRec.x, tracemapRec.y, tracemapRec.width, tracemapRec.height, RED); - else DrawRectangleLines(tracemapRec.x, tracemapRec.y, tracemapRec.width, tracemapRec.height, GRAY); - } - - for (int i = 0; i < layout.controlsCount; i++) - { - // Draws the Controls when placed on the grid. - if (!layout.controls[i].ap->hidding) - { - switch (layout.controls[i].type) - { - case WINDOWBOX: - { - GuiFade(0.8f); - GuiWindowBox((Rectangle){ layout.controls[i].ap->x + layout.controls[i].rec.x, layout.controls[i].ap->y + layout.controls[i].rec.y, layout.controls[i].rec.width, layout.controls[i].rec.height }, layout.controls[i].text); - GuiFade(1.0f); - }break; - case GROUPBOX: GuiGroupBox((Rectangle){ layout.controls[i].ap->x + layout.controls[i].rec.x, layout.controls[i].ap->y + layout.controls[i].rec.y, layout.controls[i].rec.width, layout.controls[i].rec.height }, layout.controls[i].text); break; - case LINE: GuiLine((Rectangle){ layout.controls[i].ap->x + layout.controls[i].rec.x, layout.controls[i].ap->y + layout.controls[i].rec.y, layout.controls[i].rec.width, layout.controls[i].rec.height }, 1); break; - case PANEL: - { - GuiFade(0.8f); - GuiPanel((Rectangle){ layout.controls[i].ap->x + layout.controls[i].rec.x, layout.controls[i].ap->y + layout.controls[i].rec.y, layout.controls[i].rec.width, layout.controls[i].rec.height }); - GuiFade(1.0f); - }break; - case LABEL: GuiLabel((Rectangle){ layout.controls[i].ap->x + layout.controls[i].rec.x, layout.controls[i].ap->y + layout.controls[i].rec.y, layout.controls[i].rec.width, layout.controls[i].rec.height }, layout.controls[i].text); break; - case BUTTON: GuiButton((Rectangle){ layout.controls[i].ap->x + layout.controls[i].rec.x, layout.controls[i].ap->y + layout.controls[i].rec.y, layout.controls[i].rec.width, layout.controls[i].rec.height }, layout.controls[i].text); break; - case TOGGLE: GuiToggleButton((Rectangle){ layout.controls[i].ap->x + layout.controls[i].rec.x, layout.controls[i].ap->y + layout.controls[i].rec.y, layout.controls[i].rec.width, layout.controls[i].rec.height }, layout.controls[i].text, false); break; - case TOGGLEGROUP: GuiToggleGroup((Rectangle){ layout.controls[i].ap->x + layout.controls[i].rec.x, layout.controls[i].ap->y + layout.controls[i].rec.y, layout.controls[i].rec.width, layout.controls[i].rec.height }, listData, 3, 1); break; - case CHECKBOX: GuiCheckBoxEx((Rectangle){ layout.controls[i].ap->x + layout.controls[i].rec.x, layout.controls[i].ap->y + layout.controls[i].rec.y, layout.controls[i].rec.width, layout.controls[i].rec.height }, false, layout.controls[i].text); break; - case COMBOBOX: GuiComboBox((Rectangle){ layout.controls[i].ap->x + layout.controls[i].rec.x, layout.controls[i].ap->y + layout.controls[i].rec.y, layout.controls[i].rec.width, layout.controls[i].rec.height }, listData, 3, 1); break; - case DROPDOWNBOX: GuiDropdownBox((Rectangle){ layout.controls[i].ap->x + layout.controls[i].rec.x, layout.controls[i].ap->y + layout.controls[i].rec.y, layout.controls[i].rec.width, layout.controls[i].rec.height }, listData, 3, 2); break; - case SPINNER: GuiSpinner((Rectangle){ layout.controls[i].ap->x + layout.controls[i].rec.x, layout.controls[i].ap->y + layout.controls[i].rec.y, layout.controls[i].rec.width, layout.controls[i].rec.height }, 42, 3, 25); break; - case VALUEBOX: GuiValueBox((Rectangle){ layout.controls[i].ap->x + layout.controls[i].rec.x, layout.controls[i].ap->y + layout.controls[i].rec.y, layout.controls[i].rec.width, layout.controls[i].rec.height }, 42, 100); break; - case TEXTBOX: GuiTextBox((Rectangle){ layout.controls[i].ap->x + layout.controls[i].rec.x, layout.controls[i].ap->y + layout.controls[i].rec.y, layout.controls[i].rec.width, layout.controls[i].rec.height }, layout.controls[i].text, MAX_CONTROL_TEXT_LENGTH, false); break; - case SLIDER: GuiSliderEx((Rectangle){ layout.controls[i].ap->x + layout.controls[i].rec.x, layout.controls[i].ap->y + layout.controls[i].rec.y, layout.controls[i].rec.width, layout.controls[i].rec.height }, 42, 0, 100, layout.controls[i].text, true); break; - case SLIDERBAR: GuiSliderBarEx((Rectangle){ layout.controls[i].ap->x + layout.controls[i].rec.x, layout.controls[i].ap->y + layout.controls[i].rec.y, layout.controls[i].rec.width, layout.controls[i].rec.height }, 40, 0, 100, layout.controls[i].text, true); break; - case PROGRESSBAR: GuiProgressBarEx((Rectangle){ layout.controls[i].ap->x + layout.controls[i].rec.x, layout.controls[i].ap->y + layout.controls[i].rec.y, layout.controls[i].rec.width, layout.controls[i].rec.height }, 40, 0, 100, true); break; - case STATUSBAR: GuiStatusBar((Rectangle){ layout.controls[i].ap->x + layout.controls[i].rec.x, layout.controls[i].ap->y + layout.controls[i].rec.y, layout.controls[i].rec.width, layout.controls[i].rec.height }, layout.controls[i].text, 15); break; - case LISTVIEW: GuiListView((Rectangle){ layout.controls[i].ap->x + layout.controls[i].rec.x, layout.controls[i].ap->y + layout.controls[i].rec.y, layout.controls[i].rec.width, layout.controls[i].rec.height }, listViewData, 4, 1); break; - case COLORPICKER: GuiColorPicker((Rectangle){ layout.controls[i].ap->x + layout.controls[i].rec.x, layout.controls[i].ap->y + layout.controls[i].rec.y, layout.controls[i].rec.width, layout.controls[i].rec.height }, RED); break; - case DUMMYREC: GuiDummyRec((Rectangle){ layout.controls[i].ap->x + layout.controls[i].rec.x, layout.controls[i].ap->y + layout.controls[i].rec.y, layout.controls[i].rec.width, layout.controls[i].rec.height }, layout.controls[i].text); break; - default: break; - } - - if ((layout.controls[i].ap->id == selectedAnchor) && (layout.controls[i].ap->id > 0)) DrawLine(layout.controls[i].ap->x, layout.controls[i].ap->y, layout.controls[i].ap->x + layout.controls[i].rec.x, layout.controls[i].ap->y + layout.controls[i].rec.y, RED); - - } - else if ((layout.controls[i].ap->id == selectedAnchor) && (layout.controls[i].ap->id > 0)) DrawLine(layout.controls[i].ap->x, layout.controls[i].ap->y, layout.controls[i].ap->x + layout.controls[i].rec.x, layout.controls[i].ap->y + layout.controls[i].rec.y, BLUE); - } - - // Draws the defaultRec[selectedType] of the control selected - if ((selectedControl == -1) && (focusedControl == -1 )&& !anchorMode && !tracemapEditMode && !closingWindowActive && !generateWindowActive && !(CheckCollisionPointRec(mouse, palettePanel))) - { - GuiFade(0.5f); - switch (selectedTypeDraw) - { - case WINDOWBOX: GuiWindowBox(defaultRec[selectedTypeDraw], "WINDOW BOX"); break; - case GROUPBOX: GuiGroupBox(defaultRec[selectedTypeDraw], "GROUP BOX"); break; - case LINE: GuiLine(defaultRec[selectedTypeDraw], 1); break; - case PANEL: GuiPanel(defaultRec[selectedTypeDraw]); break; - case LABEL: GuiLabel(defaultRec[selectedTypeDraw], "TEXT SAMPLE"); break; - case BUTTON: GuiButton(defaultRec[selectedTypeDraw], "BUTTON"); break; - case TOGGLE: GuiToggleButton(defaultRec[selectedTypeDraw], "TOGGLE", false); break; - case TOGGLEGROUP: GuiToggleGroup(defaultRec[selectedTypeDraw], listData, 3, 1); break; - case CHECKBOX: GuiCheckBoxEx(defaultRec[selectedTypeDraw], false, "TEXT SAMPLE"); break; - case COMBOBOX: GuiComboBox(defaultRec[selectedTypeDraw], listData, 3, 1); break; - case DROPDOWNBOX: GuiDropdownBox(defaultRec[selectedTypeDraw], listData, 3, 2); break; - case SPINNER: GuiSpinner(defaultRec[selectedTypeDraw], 42, 3, 25); break; - case VALUEBOX: GuiValueBox(defaultRec[selectedTypeDraw], 42, 100); break; - case TEXTBOX: GuiTextBox(defaultRec[selectedTypeDraw], "TEXTBOX", 7, false); break; - case SLIDER: GuiSliderEx(defaultRec[selectedTypeDraw], 42, 0, 100, "TEXT SAMPLE", true); break; - case SLIDERBAR: GuiSliderBarEx(defaultRec[selectedTypeDraw], 40, 0, 100, "TEXT SAMPLE", true); break; - case PROGRESSBAR: GuiProgressBarEx(defaultRec[selectedTypeDraw], 40, 0, 100, true); break; - case STATUSBAR: GuiStatusBar(defaultRec[selectedTypeDraw], "STATUS BAR", 15); break; - case LISTVIEW: GuiListView(defaultRec[selectedTypeDraw], listViewData, 4, 1); break; - case COLORPICKER: GuiColorPicker(defaultRec[selectedTypeDraw], RED); break; - case DUMMYREC: GuiDummyRec(defaultRec[selectedTypeDraw], "DUMMY REC"); break; - default: break; - } - - GuiFade(1.0f); - } - - // Draw the anchorPoints - for (int i = 0; i < MAX_ANCHOR_POINTS; i++) - { - if ((layout.anchors[i].enabled) && (layout.anchors[i].x != 0) && (layout.anchors[i].y != 0)) - { - if (layout.anchors[i].id == selectedAnchor && anchorPosEditMode) - { - // Draw the anchor that is currently moving - DrawCircle(layout.anchors[i].x, layout.anchors[i].y, ANCHOR_RADIUS, Fade(ORANGE, 0.5f)); - DrawRectangle(layout.anchors[i].x - ANCHOR_RADIUS - 5, layout.anchors[i].y, ANCHOR_RADIUS*2 + 10, 1, ORANGE); - DrawRectangle(layout.anchors[i].x, layout.anchors[i].y - ANCHOR_RADIUS - 5, 1, ANCHOR_RADIUS*2 + 10, ORANGE); - } - if (layout.anchors[i].id == selectedAnchor && IsKeyDown(KEY_A)) - { - // Draw the anchor that is currently moving - DrawCircle(layout.anchors[i].x, layout.anchors[i].y, ANCHOR_RADIUS, Fade(ORANGE, 0.5f)); - DrawRectangle(layout.anchors[i].x - ANCHOR_RADIUS - 5, layout.anchors[i].y, ANCHOR_RADIUS*2 + 10, 1, ORANGE); - DrawRectangle(layout.anchors[i].x, layout.anchors[i].y - ANCHOR_RADIUS - 5, 1, ANCHOR_RADIUS*2 + 10, ORANGE); - } - else if (layout.anchors[i].hidding && layout.anchors[i].id == selectedAnchor) - { - // Draw idle anchor - DrawCircle(layout.anchors[i].x, layout.anchors[i].y, ANCHOR_RADIUS, Fade(BLUE, 0.5f)); - DrawRectangle(layout.anchors[i].x - ANCHOR_RADIUS - 5, layout.anchors[i].y, ANCHOR_RADIUS*2 + 10, 1, BLUE); - DrawRectangle(layout.anchors[i].x, layout.anchors[i].y - ANCHOR_RADIUS - 5, 1, ANCHOR_RADIUS*2 + 10, BLUE); - DrawText(FormatText("[%i, %i]", layout.anchors[i].x, layout.anchors[i].y), layout.anchors[i].x, layout.anchors[i].y - 25, 20, BLUE); - } - else if (layout.anchors[i].id == selectedAnchor) - { - // Draw the selected anchor - DrawCircle(layout.anchors[i].x, layout.anchors[i].y, ANCHOR_RADIUS, Fade(RED, 0.5f)); - DrawRectangle(layout.anchors[i].x - ANCHOR_RADIUS - 5, layout.anchors[i].y, ANCHOR_RADIUS*2 + 10, 1, RED); - DrawRectangle(layout.anchors[i].x, layout.anchors[i].y - ANCHOR_RADIUS - 5, 1, ANCHOR_RADIUS*2 + 10, RED); - DrawText(FormatText("[%i, %i]", layout.anchors[i].x, layout.anchors[i].y), layout.anchors[i].x, layout.anchors[i].y - 25, 20, RED); - } - else if (layout.anchors[i].hidding) - { - // Draw idle anchor - DrawCircleLines(layout.anchors[i].x, layout.anchors[i].y, ANCHOR_RADIUS, Fade(BLUE, 0.5f)); - DrawRectangle(layout.anchors[i].x - ANCHOR_RADIUS - 5, layout.anchors[i].y, ANCHOR_RADIUS*2 + 10, 1, BLUE); - DrawRectangle(layout.anchors[i].x, layout.anchors[i].y - ANCHOR_RADIUS - 5, 1, ANCHOR_RADIUS*2 + 10, BLUE); - } - else - { - // Draw idle anchor - DrawCircleLines(layout.anchors[i].x, layout.anchors[i].y, ANCHOR_RADIUS, Fade(RED, 0.5f)); - DrawRectangle(layout.anchors[i].x - ANCHOR_RADIUS - 5, layout.anchors[i].y, ANCHOR_RADIUS*2 + 10, 1, RED); - DrawRectangle(layout.anchors[i].x, layout.anchors[i].y - ANCHOR_RADIUS - 5, 1, ANCHOR_RADIUS*2 + 10, RED); - } - } - } - - // Draw selected control selection rectangle (transparent RED/WHITE) - if (((selectedControl != -1) || (focusedControl != -1)) && (selectedControl < layout.controlsCount)) - { - if (selectedControl != -1) DrawRectangleRec((Rectangle){ layout.controls[selectedControl].ap->x + layout.controls[selectedControl].rec.x, layout.controls[selectedControl].ap->y + layout.controls[selectedControl].rec.y, layout.controls[selectedControl].rec.width, layout.controls[selectedControl].rec.height }, (nameEditMode) ? Fade(WHITE, 0.7f) : Fade(RED, 0.5f)); - - if (focusedControl != -1) DrawRectangleLinesEx((Rectangle){ layout.controls[focusedControl].ap->x + layout.controls[focusedControl].rec.x, layout.controls[focusedControl].ap->y + layout.controls[focusedControl].rec.y, layout.controls[focusedControl].rec.width, layout.controls[focusedControl].rec.height }, 1, RED); - } - - // Draw anchor lines - if ((selectedControl != -1) && layout.controls[selectedControl].ap->id > 0 && !layout.controls[selectedControl].ap->hidding) DrawLine(layout.controls[selectedControl].ap->x, layout.controls[selectedControl].ap->y, layout.controls[selectedControl].ap->x + layout.controls[selectedControl].rec.x, layout.controls[selectedControl].ap->y + layout.controls[selectedControl].rec.y, RED); - else if ((selectedControl != -1) && layout.controls[selectedControl].ap->id > 0 && layout.controls[selectedControl].ap->hidding) DrawLine(layout.controls[selectedControl].ap->x, layout.controls[selectedControl].ap->y, layout.controls[selectedControl].ap->x + layout.controls[selectedControl].rec.x, layout.controls[selectedControl].ap->y + layout.controls[selectedControl].rec.y, BLUE); - - if ((focusedControl != -1) && layout.controls[focusedControl].ap->id > 0 && !layout.controls[focusedControl].ap->hidding) DrawLine(layout.controls[focusedControl].ap->x, layout.controls[focusedControl].ap->y, layout.controls[focusedControl].ap->x + layout.controls[focusedControl].rec.x, layout.controls[focusedControl].ap->y + layout.controls[focusedControl].rec.y, RED); - else if ((focusedControl != -1) && layout.controls[focusedControl].ap->id > 0 && layout.controls[focusedControl].ap->hidding) DrawLine(layout.controls[focusedControl].ap->x, layout.controls[focusedControl].ap->y, layout.controls[focusedControl].ap->x + layout.controls[focusedControl].rec.x, layout.controls[focusedControl].ap->y + layout.controls[focusedControl].rec.y, BLUE); - - // Draw cursor (control mode or anchor mode) - if ((selectedControl == -1) && (selectedAnchor == -1)) - { - if (anchorMode) - { - DrawCircleLines(mouse.x, mouse.y, ANCHOR_RADIUS, Fade(RED, 0.5f)); - DrawRectangle(mouse.x - ANCHOR_RADIUS - 5, mouse.y, ANCHOR_RADIUS*2 + 10, 1, RED); - DrawRectangle(mouse.x , mouse.y - ANCHOR_RADIUS - 5, 1, ANCHOR_RADIUS*2 + 10, RED); - } - else - { - DrawRectangle(mouse.x - 8, mouse.y, 17, 1, RED); - DrawRectangle(mouse.x, mouse.y - 8, 1, 17, RED); - } - } - - // Draw cursor on textEditMode - if (textEditMode) - { - if (((framesCounter/20)%2) == 0) - { - if (layout.controls[selectedControl].type == LABEL) DrawText("|", layout.controls[selectedControl].rec.x + layout.controls[selectedControl].ap->x + MeasureText(layout.controls[selectedControl].text, style[DEFAULT_TEXT_SIZE]), layout.controls[selectedControl].rec.y + layout.controls[selectedControl].ap->y - style[DEFAULT_TEXT_SIZE]/2 + layout.controls[selectedControl].rec.height/2, style[DEFAULT_TEXT_SIZE] + 2, BLACK); - else if (layout.controls[selectedControl].type == TEXTBOX) DrawText("|", layout.controls[selectedControl].rec.x + layout.controls[selectedControl].ap->x + MeasureText(layout.controls[selectedControl].text, style[DEFAULT_TEXT_SIZE]) + 4, layout.controls[selectedControl].rec.y + layout.controls[selectedControl].ap->y - style[DEFAULT_TEXT_SIZE]/2 + layout.controls[selectedControl].rec.height/2, style[DEFAULT_TEXT_SIZE] + 2, BLACK); - else if (layout.controls[selectedControl].type == GROUPBOX) DrawText("|", layout.controls[selectedControl].rec.x + layout.controls[selectedControl].ap->x + 15 + MeasureText(layout.controls[selectedControl].text, style[DEFAULT_TEXT_SIZE]), layout.controls[selectedControl].rec.y + layout.controls[selectedControl].ap->y - style[DEFAULT_TEXT_SIZE]/2, style[DEFAULT_TEXT_SIZE] + 2, BLACK); - else if (layout.controls[selectedControl].type == WINDOWBOX) DrawText("|", layout.controls[selectedControl].rec.x + layout.controls[selectedControl].ap->x + 10 + MeasureText(layout.controls[selectedControl].text, style[DEFAULT_TEXT_SIZE]), layout.controls[selectedControl].rec.y + layout.controls[selectedControl].ap->y + style[DEFAULT_TEXT_SIZE]/2, style[DEFAULT_TEXT_SIZE] + 2, BLACK); - else if (layout.controls[selectedControl].type == STATUSBAR) DrawText("|", layout.controls[selectedControl].rec.x + layout.controls[selectedControl].ap->x + 15 + MeasureText(layout.controls[selectedControl].text, style[DEFAULT_TEXT_SIZE]), layout.controls[selectedControl].rec.y + layout.controls[selectedControl].ap->y - style[DEFAULT_TEXT_SIZE]/2 + layout.controls[selectedControl].rec.height/2, style[DEFAULT_TEXT_SIZE] + 2, BLACK); - else if (layout.controls[selectedControl].type == CHECKBOX) DrawText("|", layout.controls[selectedControl].rec.x + layout.controls[selectedControl].ap->x + layout.controls[selectedControl].rec.width + 5 + MeasureText(layout.controls[selectedControl].text, style[DEFAULT_TEXT_SIZE]), layout.controls[selectedControl].rec.y + layout.controls[selectedControl].ap->y - style[DEFAULT_TEXT_SIZE]/2 + layout.controls[selectedControl].rec.height/2, style[DEFAULT_TEXT_SIZE] + 2, BLACK); - else if (layout.controls[selectedControl].type == SLIDERBAR || layout.controls[selectedControl].type == SLIDER) DrawText("|", layout.controls[selectedControl].rec.x + layout.controls[selectedControl].ap->x - 5, layout.controls[selectedControl].rec.y + layout.controls[selectedControl].ap->y - style[DEFAULT_TEXT_SIZE]/2 + layout.controls[selectedControl].rec.height/2, style[DEFAULT_TEXT_SIZE] + 2, BLACK); - else DrawText("|", layout.controls[selectedControl].rec.x + layout.controls[selectedControl].ap->x + layout.controls[selectedControl].rec.width/2 + MeasureText(layout.controls[selectedControl].text , style[DEFAULT_TEXT_SIZE])/2 + 2, layout.controls[selectedControl].rec.y + layout.controls[selectedControl].ap->y + layout.controls[selectedControl].rec.height/2 - 6, style[DEFAULT_TEXT_SIZE] + 2, BLACK); - } - } - - // Draw nameEditMode - if (nameEditMode) - { - DrawText(FormatText("%s", layout.controls[selectedControl].name), layout.controls[selectedControl].rec.x + layout.controls[selectedControl].ap->x + layout.controls[selectedControl].rec.width/2 - MeasureText(layout.controls[selectedControl].name, style[DEFAULT_TEXT_SIZE]*2)/2, layout.controls[selectedControl].rec.y + layout.controls[selectedControl].ap->y + layout.controls[selectedControl].rec.height/2 - 10, style[DEFAULT_TEXT_SIZE]*2, BLACK); - - if (((framesCounter/20)%2) == 0) DrawText("|", layout.controls[selectedControl].rec.x + layout.controls[selectedControl].rec.width/2 + layout.controls[selectedControl].ap->x + MeasureText(layout.controls[selectedControl].name, style[DEFAULT_TEXT_SIZE]*2)/2 + 2, layout.controls[selectedControl].rec.y + layout.controls[selectedControl].ap->y + layout.controls[selectedControl].rec.height/2 - 10, style[DEFAULT_TEXT_SIZE]*2 + 2, BLACK); - } - else if ((IsKeyDown(KEY_N)) && (!textEditMode) && (!generateWindowActive) && (!resetWindowActive)) - { - if (layout.controlsCount > 0) DrawRectangle(0, 0, GetScreenWidth(), GetScreenHeight(), Fade(WHITE, 0.7f)); - - for (int i = 0; i < layout.controlsCount; i++) - { - // Draws the Controls when placed on the grid. - if (!layout.controls[i].ap->hidding) - DrawText(FormatText("%s", layout.controls[i].name), layout.controls[i].rec.x + layout.controls[i].ap->x + layout.controls[i].rec.width/2 - MeasureText(layout.controls[i].name, style[DEFAULT_TEXT_SIZE]*2)/2, layout.controls[i].rec.y + layout.controls[i].ap->y + layout.controls[i].rec.height/2 - 10, style[DEFAULT_TEXT_SIZE]*2, BLACK); - } - } - - - // Draw anchor linking line - if (anchorLinkMode) DrawLine(layout.anchors[linkedAnchor].x, layout.anchors[linkedAnchor].y, mouse.x, mouse.y, BLACK); - - // Draw Rectangle Info - if (selectedControl != -1) - { - if (!controlGlobalPos) DrawText(FormatText("[%i, %i, %i, %i]", (int)layout.controls[selectedControl].rec.x, (int)layout.controls[selectedControl].rec.y, (int)layout.controls[selectedControl].rec.width, (int)layout.controls[selectedControl].rec.height), (int)layout.controls[selectedControl].rec.x + layout.controls[selectedControl].ap->x, (int)layout.controls[selectedControl].rec.y + layout.controls[selectedControl].ap->y - 30, 20, MAROON); - else DrawText(FormatText("[%i, %i, %i, %i]", (int)layout.controls[selectedControl].rec.x + layout.controls[selectedControl].ap->x, (int)layout.controls[selectedControl].rec.y + layout.controls[selectedControl].ap->y, (int)layout.controls[selectedControl].rec.width, (int)layout.controls[selectedControl].rec.height), (int)layout.controls[selectedControl].rec.x + layout.controls[selectedControl].ap->x, (int)layout.controls[selectedControl].rec.y + layout.controls[selectedControl].ap->y - 30, 20, RED); - } - - // Draw Image info - if (tracemapEditMode) DrawText(FormatText("[%i, %i, %i, %i]", tracemapRec.x, tracemapRec.y, tracemapRec.width, tracemapRec.height), tracemapRec.x + 25, tracemapRec.y + 25, 20, MAROON); - - // Draw the id of all controls - if (IsKeyDown(KEY_LEFT_ALT)) - { - for (int i = layout.controlsCount - 1; i >= 0; i--) DrawText(FormatText("[%i]", layout.controls[i].id), layout.controls[i].rec.x + layout.controls[i].ap->x + layout.controls[i].rec.width, layout.controls[i].rec.y + layout.controls[i].ap->y - 10, 10, BLUE); - } - // Draw the help listData (by default is out of screen) - if (helpPositionX > -280) - { - DrawRectangleRec((Rectangle){ helpPositionX + 20, 15, 280, 550 }, GetColor(style[DEFAULT_BACKGROUND_COLOR])); - GuiGroupBox((Rectangle){ helpPositionX + 20, 15, 280, 550 }, "TAB - Shortcuts"); - GuiLabel((Rectangle){ helpPositionX + 30, 30, 0, 0 }, "G - Toggle grid mode"); - GuiLabel((Rectangle){ helpPositionX + 30, 50, 0, 0 }, "S - Toggle snap to grid mode"); - GuiLabel((Rectangle){ helpPositionX + 30, 70, 0, 0 }, "F - Toggle control position (global/anchor)"); - GuiLine((Rectangle){ helpPositionX + 30, 85, 260, 10 }, 1); - GuiLabel((Rectangle){ helpPositionX + 30, 100, 0, 0 }, "SPACE - Lock/unlock control for editing"); - GuiLabel((Rectangle){ helpPositionX + 30, 120, 0, 0 }, "ARROWS - Edit control position"); - GuiLabel((Rectangle){ helpPositionX + 30, 140, 0, 0 }, "LSHIFT + ARROWS - Smooth edit position"); - GuiLabel((Rectangle){ helpPositionX + 30, 160, 0, 0 }, "LCTRL + ARROWS - Edit control scale"); - GuiLabel((Rectangle){ helpPositionX + 30, 180, 0, 0 }, "LCTRL + LSHIFT + ARROWS - Smooth edit scale"); - GuiLabel((Rectangle){ helpPositionX + 30, 200, 0, 0 }, "LCTRL + R - Resize control to closest snap"); - GuiLabel((Rectangle){ helpPositionX + 30, 220, 0, 0 }, "LCTRL + D - Duplicate selected control"); - GuiLabel((Rectangle){ helpPositionX + 30, 240, 0, 0 }, "LCTRL + N - Resets layout"); - GuiLabel((Rectangle){ helpPositionX + 30, 260, 0, 0 }, "DEL - Delete selected control"); - GuiLine((Rectangle){ helpPositionX + 30, 275, 260, 10 }, 1); - GuiLabel((Rectangle){ helpPositionX + 30, 290, 0, 0 }, "T - Control text editing (if possible)"); - GuiLabel((Rectangle){ helpPositionX + 30, 310, 0, 0 }, "N - Control name editing "); - GuiLabel((Rectangle){ helpPositionX + 30, 330, 0, 0 }, "ESC - Exit text/name editing mode"); - GuiLabel((Rectangle){ helpPositionX + 30, 350, 0, 0 }, "ENTER - Validate text/name edition"); - GuiLine((Rectangle){ helpPositionX + 30, 365, 260, 10 }, 1); - GuiLabel((Rectangle){ helpPositionX + 30, 380, 0, 0 }, "LALT + UP/DOWN - Control layer order"); - GuiLine((Rectangle){ helpPositionX + 30, 395, 260, 10 }, 1); - GuiLabel((Rectangle){ helpPositionX + 30, 410, 0, 0 }, "A - Anchor editing mode"); - GuiLabel((Rectangle){ helpPositionX + 30, 430, 0, 0 }, "RMB - Link anchor to control"); - GuiLabel((Rectangle){ helpPositionX + 30, 450, 0, 0 }, "U - Unlink control from anchor"); - GuiLabel((Rectangle){ helpPositionX + 30, 470, 0, 0 }, "H - Hide/Unhide controls for selected anchor"); - GuiLine((Rectangle){ helpPositionX + 30, 485, 260, 10 }, 1); - GuiLabel((Rectangle){ helpPositionX + 30, 500, 0, 0 }, "LCTRL + S - Save layout file (.rgl)"); - GuiLabel((Rectangle){ helpPositionX + 30, 520, 0, 0 }, "LCTRL + O - Open layout file (.rgl)"); - GuiLabel((Rectangle){ helpPositionX + 30, 540, 0, 0 }, "LCTRL + ENTER - Export layout to code"); - } - - // Draw right panel controls palette - GuiPanel(palettePanel); - - GuiWindowBox(paletteRecs[0], "WindowBox"); - GuiGroupBox(paletteRecs[1], "GroupBox"); - GuiLine(paletteRecs[2], 1); - GuiPanel(paletteRecs[3]); - GuiLabel(paletteRecs[4], "Label (SAMPLE TEXT)"); - GuiButton(paletteRecs[5], "Button"); - GuiToggleButton(paletteRecs[6], "Toggle", false); - GuiCheckBox(paletteRecs[8], false); - GuiToggleGroup(paletteRecs[7], listData, 3, 0); - GuiComboBox(paletteRecs[9], listData, 3, 0); - GuiDropdownBox(paletteRecs[10], listData, 3, 0); - GuiSpinner(paletteRecs[11], 42, 100, 25); - GuiValueBox(paletteRecs[12], 42, 100); - GuiTextBox(paletteRecs[13], "TEXTBOX", 7, false); - GuiSlider(paletteRecs[14], 42, 0, 100); - GuiSliderBar(paletteRecs[15], 42, 0, 100); - GuiProgressBar(paletteRecs[16], 42, 0, 100); - GuiStatusBar(paletteRecs[17], "StatusBar", 10); - GuiListView(paletteRecs[18], listData, 3, 1); - GuiColorPicker(paletteRecs[19], RED); - GuiDummyRec(paletteRecs[20], "DummyRec"); - - DrawRectangleRec(paletteRecs[selectedType], Fade(RED, 0.5f)); - - if (paletteSelect > -1) DrawRectangleLinesEx(paletteRecs[paletteSelect], 1, RED); - - // Draw export options window - if (generateWindowActive) - { - DrawRectangle(0, 0, GetScreenWidth(), GetScreenHeight(), Fade(WHITE, 0.7f)); - generateWindowActive = !GuiWindowBox((Rectangle){ exportWindowPos.x, exportWindowPos.y, 400, 225 }, "Generate Code Options - layout"); - - GuiLabel((Rectangle){ exportWindowPos.x + 10, exportWindowPos.y + 35, 65, 25 }, "Name:"); - GuiTextBox((Rectangle){ exportWindowPos.x + 75, exportWindowPos.y + 35, 135, 25 }, config.name, toolNameSize, true); - GuiLabel((Rectangle){ exportWindowPos.x + 225, exportWindowPos.y + 35, 50, 25 }, "Version:"); - GuiTextBox((Rectangle){ exportWindowPos.x + 275, exportWindowPos.y + 35, 115, 25 }, config.version, toolVersionSize, true); - GuiLabel((Rectangle){ exportWindowPos.x + 10, exportWindowPos.y + 65, 65, 25 }, "Window size:"); - config.width = GuiValueBox((Rectangle){ exportWindowPos.x + 75, exportWindowPos.y + 65, 60, 25 }, config.width, 1000); - GuiLabel((Rectangle){ exportWindowPos.x + 140, exportWindowPos.y + 65, 10, 25 }, "x"); - config.height = GuiValueBox((Rectangle){ exportWindowPos.x + 150, exportWindowPos.y + 65, 60, 25 }, config.height, 1000); - GuiLabel((Rectangle){ exportWindowPos.x + 225, exportWindowPos.y + 65, 50, 25 }, "Company:"); - GuiTextBox((Rectangle){ exportWindowPos.x + 275, exportWindowPos.y + 65, 115, 25 }, config.company, companySize, true); - GuiLabel((Rectangle){ exportWindowPos.x + 10, exportWindowPos.y + 95, 65, 25 }, "Description:"); - GuiTextBox((Rectangle){ exportWindowPos.x + 75, exportWindowPos.y + 95, 315, 55 }, config.description, toolDescriptionSize, true); - config.defineRecs = GuiCheckBoxEx((Rectangle){ exportWindowPos.x + 10, exportWindowPos.y + 160, 15, 15 }, config.defineRecs, "Define Rectangles"); - config.defineTexts = GuiCheckBoxEx((Rectangle){ exportWindowPos.x + 10, exportWindowPos.y + 180, 15, 15 }, config.defineTexts, "Define text const"); - config.exportAnchors = GuiCheckBoxEx((Rectangle){ exportWindowPos.x + 140, exportWindowPos.y + 160, 15, 15 }, config.exportAnchors, "Export anchors"); - config.exportAnchor0 = GuiCheckBoxEx((Rectangle){ exportWindowPos.x + 140, exportWindowPos.y + 180, 15, 15 }, config.exportAnchor0, "Export anchor 0"); - config.fullComments = GuiCheckBoxEx((Rectangle){ exportWindowPos.x + 140, exportWindowPos.y + 200, 15, 15 }, config.fullComments, "Full comments"); - config.cropWindow = GuiCheckBoxEx((Rectangle){ exportWindowPos.x + 275, exportWindowPos.y + 160, 15, 15 }, config.cropWindow, "Crop to Window"); - config.fullVariables = GuiCheckBoxEx((Rectangle){ exportWindowPos.x + 10, exportWindowPos.y + 200, 15, 15 }, config.fullVariables, "Full variables"); - - if (GuiButton((Rectangle){ exportWindowPos.x + 275, exportWindowPos.y + 185, 115, 30 }, "Generate Code")) - { - ShowExportLayoutDialog(config); - generateWindowActive = false; - } - } - - // Draw status bar bottom with debug information - GuiStatusBar((Rectangle){ 0, GetScreenHeight() - 24, 126, 24}, FormatText("MOUSE: (%i, %i)", (int)mouse.x, (int)mouse.y), 15); - GuiStatusBar((Rectangle){ 124, GetScreenHeight() - 24, 81, 24}, (snapMode ? "SNAP: ON" : "SNAP: OFF"), 10); - GuiStatusBar((Rectangle){ 204, GetScreenHeight() - 24, 145, 24}, FormatText("CONTROLS COUNT: %i", layout.controlsCount), 20); - if (selectedControl != -1) GuiStatusBar((Rectangle){ 348, GetScreenHeight() - 24, GetScreenWidth() - 348, 24}, FormatText("SELECTED CONTROL: #%03i | %s | REC (%i, %i, %i, %i) | %s", selectedControl, controlTypeName[layout.controls[selectedControl].type], (int)layout.controls[selectedControl].rec.x, (int)layout.controls[selectedControl].rec.y, (int)layout.controls[selectedControl].rec.width, (int)layout.controls[selectedControl].rec.height, layout.controls[selectedControl].name), 15); - else GuiStatusBar((Rectangle){ 348, GetScreenHeight() - 24, GetScreenWidth() - 348, 24}, "", 15); - - // Draw ending message window (save) - if (closingWindowActive) - { - DrawRectangle(0, 0, GetScreenWidth(), GetScreenHeight(), Fade(WHITE, 0.7f)); - closingWindowActive = !GuiWindowBox((Rectangle){ GetScreenWidth()/2 - 125, GetScreenHeight()/2 - 50, 250, 100 }, "Closing rGuiLayout"); - - GuiLabel((Rectangle){ GetScreenWidth()/2 - 95, GetScreenHeight()/2 - 60, 200, 100 }, "Do you want to save before quitting?"); - - if (GuiButton((Rectangle){ GetScreenWidth()/2 - 94, GetScreenHeight()/2 + 10, 85, 25 }, "Yes")) - { - cancelSave = false; - ShowSaveLayoutDialog(); - if (cancelSave) exitWindow = true; - } - else if (GuiButton((Rectangle){ GetScreenWidth()/2 + 10, GetScreenHeight()/2 + 10, 85, 25 }, "No")) { exitWindow = true; } - } - - // Draw reset message window (save) - if (resetWindowActive) - { - DrawRectangle(0, 0, GetScreenWidth(), GetScreenHeight(), Fade(WHITE, 0.7f)); - resetWindowActive = !GuiWindowBox((Rectangle){ GetScreenWidth()/2 - 125, GetScreenHeight()/2 - 50, 250, 100 }, "Creating new layout"); - - GuiLabel((Rectangle){ GetScreenWidth()/2 - 95, GetScreenHeight()/2 - 60, 200, 100 }, "Do you want to save the current layout?"); - - if (GuiButton((Rectangle){ GetScreenWidth()/2 - 94, GetScreenHeight()/2 + 10, 85, 25 }, "Yes")) - { - cancelSave = false; - ShowSaveLayoutDialog(); - if (cancelSave) resetLayout = true; - } - else if (GuiButton((Rectangle){ GetScreenWidth()/2 + 10, GetScreenHeight()/2 + 10, 85, 25 }, "No")) { resetLayout = true; } - } - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - UnloadTexture(tracemap); - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} - -//---------------------------------------------------------------------------------- -// Module specific Functions Definition -//---------------------------------------------------------------------------------- - -// Show save layout dialog -static void ShowSaveLayoutDialog(void) -{ - const char *filters[] = { "*.rgl" }; - const char *fileName = tinyfd_saveFileDialog("Save raygui layout text file", "", 1, filters, "raygui Layout Files (*.rgl)"); - - // Save layout.controls file (text or binary) - if (fileName != NULL) - { - char outFileName[64] = { 0 }; - strcpy(outFileName, fileName); - if (GetExtension(fileName) == NULL) strcat(outFileName, ".rgl\0"); // No extension provided - SaveLayoutRGL(outFileName, false); - strcpy(loadedFileName, outFileName); - SetWindowTitle(FormatText("rGuiLayout v1.1 - %s", GetFileName(loadedFileName))); - cancelSave = true; - } -} - -// Show save layout dialog -static void ShowExportLayoutDialog(GuiLayoutConfig config) -{ - const char *filters[] = { "*.c", "*.go", "*.lua" }; - const char *fileName = tinyfd_saveFileDialog("Generate code file", config.name, 3, filters, "Code file"); - - if (fileName != NULL) - { - char outFileName[64] = { 0 }; - strcpy(outFileName, fileName); - if (GetExtension(fileName) == NULL) strcat(outFileName, ".c\0"); // No extension provided - GenerateCode(outFileName, config); - } -} - -// Save gui layout information -static void SaveLayoutRGL(const char *fileName, bool binary) -{ - if (binary) - { - #define RGL_FILE_VERSION_BINARY 100 - - FILE *rglFile = fopen(fileName, "wb"); - - if (rglFile != NULL) - { - // Write some header info (12 bytes) - // id: "RGL " - 4 bytes - // version: 100 - 2 bytes - // reserved - 2 bytes - - char signature[5] = "RGL "; - short version = RGL_FILE_VERSION_BINARY; - short reserved = 0; - - fwrite(signature, 1, 4, rglFile); - fwrite(&version, 1, sizeof(short), rglFile); - fwrite(&reserved, 1, sizeof(short), rglFile); - - fwrite(&layout, 1, sizeof(GuiLayout), rglFile); - - fclose(rglFile); - } - } - else - { - #define RGL_FILE_VERSION_TEXT "1.0" - - FILE *rglFile = fopen(fileName, "wt"); - - if (rglFile != NULL) - { - // Write some description comments - fprintf(rglFile, "#\n# rgl text file (v%s) - raygui layout text file generated using rGuiLayout\n#\n", RGL_FILE_VERSION_TEXT); - fprintf(rglFile, "# Total number of controls: %i\n", layout.controlsCount); - fprintf(rglFile, "# Anchor info: a \n"); - fprintf(rglFile, "# Control info: c \n#\n"); - - for (int i = 0; i < MAX_ANCHOR_POINTS; i++) - { - fprintf(rglFile, "a %03i %i %i %i\n", layout.anchors[i].id, layout.anchors[i].x, layout.anchors[i].y, layout.anchors[i].enabled); - } - - for (int i = 0; i < layout.controlsCount; i++) - { - fprintf(rglFile, "c %03i %i %s %i %i %i %i %i %s\n", layout.controls[i].id, layout.controls[i].type, layout.controls[i].name, (int)layout.controls[i].rec.x, (int)layout.controls[i].rec.y, (int)layout.controls[i].rec.width, (int)layout.controls[i].rec.height, layout.controls[i].ap->id, layout.controls[i].text); - } - - fclose(rglFile); - } - } -} - -// Import gui layout information -// NOTE: Updates global variable: layout -static void LoadLayoutRGL(const char *fileName) -{ - char buffer[256]; - bool tryBinary = false; - - int anchorId = 0; // TODO: Review!!! - int anchorX = 0; - int anchorY = 0; - int anchorCounter = 0; - - FILE *rglFile = fopen(fileName, "rt"); - - if (rglFile != NULL) - { - // Reset all the controls - for (int i = 0; i < MAX_GUI_CONTROLS; i++) - { - layout.controls[i].id = 0; - layout.controls[i].type = 0; - layout.controls[i].rec = (Rectangle){ 0, 0, 0, 0 }; - memset(layout.controls[i].text, 0, MAX_CONTROL_TEXT_LENGTH); - memset(layout.controls[i].name, 0, MAX_CONTROL_NAME_LENGTH); - layout.controls[i].ap = &layout.anchors[0]; - } - for (int i = 0; i < MAX_ANCHOR_POINTS; i++) layout.anchors[i].hidding = false; - - fgets(buffer, 256, rglFile); - - if (buffer[0] != 'R') // Text file! - { - layout.controlsCount = 0; - - while (!feof(rglFile)) - { - if ((buffer[0] != '\n') && (buffer[0] != '#') && (buffer[0] == 'a')) - { - sscanf(buffer, "a %03i %i %i %i", &layout.anchors[anchorCounter].id, &layout.anchors[anchorCounter].x, &layout.anchors[anchorCounter].y, &layout.anchors[anchorCounter].enabled); - //printf("a %03i %i %i %i\n", layout.anchors[anchorCounter].id, layout.anchors[anchorCounter].x, layout.anchors[anchorCounter].y, layout.anchors[anchorCounter].enabled); - anchorCounter++; - } - else if ((buffer[0] != '\n') && (buffer[0] != '#') && (buffer[0] == 'c')) - { - sscanf(buffer, "c %d %i %s %f %f %f %f %d %[^\n]s", &layout.controls[layout.controlsCount].id, &layout.controls[layout.controlsCount].type, layout.controls[layout.controlsCount].name, &layout.controls[layout.controlsCount].rec.x, &layout.controls[layout.controlsCount].rec.y, &layout.controls[layout.controlsCount].rec.width, &layout.controls[layout.controlsCount].rec.height, &anchorId, layout.controls[layout.controlsCount].text); - //printf("c %d %i %i %i %i %i %i %s\n", layout.controls[layout.controlsCount].id, layout.controls[layout.controlsCount].type, layout.controls[layout.controlsCount].rec.x, layout.controls[layout.controlsCount].rec.y, layout.controls[layout.controlsCount].rec.width, layout.controls[layout.controlsCount].rec.height, anchorId, layout.controls[layout.controlsCount].text); - - layout.controls[layout.controlsCount].ap = &layout.anchors[anchorId]; - layout.controlsCount++; - } - fgets(buffer, 256, rglFile); - } - } - else tryBinary = true; - - fclose(rglFile); - } - - if (tryBinary) - { - FILE *rglFile = fopen(fileName, "rb"); - - if (rglFile != NULL) - { - char signature[5] = ""; - short version = 0; - short reserved = 0; - - fread(signature, 1, 4, rglFile); - fread(&version, 1, sizeof(short), rglFile); - fread(&reserved, 1, sizeof(short), rglFile); - - if ((signature[0] == 'R') && - (signature[1] == 'G') && - (signature[2] == 'L') && - (signature[3] == ' ')) fread(&layout, 1, sizeof(GuiLayout), rglFile); - else TraceLog(LOG_WARNING, "[raygui] Invalid layout file"); - - printf("[GuiLayout] Controls counter: %i\n", layout.controlsCount); - - fclose(rglFile); - } - } - - printf("[GuiLayout] Layout data loaded successfully\n"); -} - -static char *GetControlAnchorRec(int anchorId, Rectangle controlRec, GuiLayoutConfig config) -{ - static char text[512]; - memset(text, 0, 512); - - if (config.exportAnchors && config.exportAnchor0) strcpy(text, FormatText("(Rectangle){ anchor%02i.x + %i, anchor%02i.y + %i, %i, %i }", anchorId, (int)controlRec.x, anchorId, (int)controlRec.y, (int)controlRec.width, (int)controlRec.height)); - else if (config.exportAnchors && !config.exportAnchor0) - { - if (anchorId > 0) strcpy(text, FormatText("(Rectangle){ anchor%02i.x + %i, anchor%02i.y + %i, %i, %i }", anchorId, (int)controlRec.x, anchorId, (int)controlRec.y, (int)controlRec.width, (int)controlRec.height)); - else strcpy(text, FormatText("(Rectangle){ %i, %i, %i, %i }", (int)controlRec.x, (int)controlRec.y, (int)controlRec.width, (int)controlRec.height)); - - } - else if (!config.exportAnchors && config.exportAnchor0) - { - if (anchorId > 0) strcpy(text, FormatText("(Rectangle){ %i, %i, %i, %i }", layout.anchors[anchorId].x + (int)controlRec.x, layout.anchors[anchorId].y + (int)controlRec.y, (int)controlRec.width, (int)controlRec.height)); - else strcpy(text, FormatText("(Rectangle){ anchor%02i.x + %i, anchor%02i.y + %i, %i, %i }", anchorId, (int)controlRec.x, anchorId, (int)controlRec.y, (int)controlRec.width, (int)controlRec.height)); - } - else strcpy(text, FormatText("(Rectangle){ %i, %i, %i, %i }", layout.anchors[anchorId].x + (int)controlRec.x, layout.anchors[anchorId].y + (int)controlRec.y, (int)controlRec.width, (int)controlRec.height)); - - return text; -} - -static char *ExportFullVariables(int controlType, char *name, GuiLayoutConfig config) -{ - static char text[512]; - memset(text, 0, 512); - - switch(controlType) - { - case SLIDER: - case SLIDERBAR: - { - if (config.fullVariables) strcpy(text, FormatText("%sMinValue, %sMaxValue", name, name)); - else strcpy(text, "0, 100"); - } break; - - case DROPDOWNBOX: - case COMBOBOX: - case LISTVIEW: - case TOGGLEGROUP: - { - if (config.fullVariables) strcpy(text, FormatText("%sCount", name)); - else strcpy(text, "3"); - } break; - - case TEXTBOX: - { - if (config.fullVariables) strcpy(text, FormatText("%sSize", name)); - else strcpy(text, FormatText("%i", MAX_CONTROL_TEXT_LENGTH)); - } break; - } - - return text; -} - -// Generate C code for gui layout -static void GenerateCode(const char *fileName, GuiLayoutConfig config) -{ - FILE *ftool = fopen(fileName, "wt"); - - fprintf(ftool, "/*******************************************************************************************\n"); - fprintf(ftool, "*\n"); - fprintf(ftool, "* %s - %s\n", config.name, config.description); - fprintf(ftool, "*\n"); - fprintf(ftool, "* LICENSE: zlib/libpng\n"); - fprintf(ftool, "*\n"); - fprintf(ftool, "* Copyright (c) %i %s\n", 2018, config.company); - fprintf(ftool, "*\n"); - fprintf(ftool, "**********************************************************************************************/\n\n"); - fprintf(ftool, "#include \"raylib.h\"\n\n"); - fprintf(ftool, "#define RAYGUI_IMPLEMENTATION\n"); - fprintf(ftool, "#include \"raygui.h\"\n\n"); - fprintf(ftool, "//----------------------------------------------------------------------------------\n"); - fprintf(ftool, "// Controls Functions Declaration\n"); - fprintf(ftool, "//----------------------------------------------------------------------------------\n"); - - for (int i = 0; i < layout.controlsCount; i++) - { - if (layout.controls[i].type == BUTTON) fprintf(ftool, "static void %s(); // %s: %s logic\n", layout.controls[i].name, controlTypeNameLow[layout.controls[i].type], layout.controls[i].name); - } - - fprintf(ftool, "\n"); - fprintf(ftool, "//------------------------------------------------------------------------------------\n"); - fprintf(ftool, "// Program main entry point\n"); - fprintf(ftool, "//------------------------------------------------------------------------------------\n"); - fprintf(ftool, "int main()\n"); - fprintf(ftool, "{\n"); - fprintf(ftool, " // Initialization\n"); - fprintf(ftool, " //---------------------------------------------------------------------------------------\n"); - fprintf(ftool, " int screenWidth = %i;\n", config.width); - fprintf(ftool, " int screenHeight = %i;\n\n", config.height); - fprintf(ftool, " InitWindow(screenWidth, screenHeight, \"%s\");\n\n", config.name); - - fprintf(ftool, " // %s: controls initialization\n", config.name); - fprintf(ftool, " //----------------------------------------------------------------------------------\n"); - - // TODO: Use config.exportAnchors and config.exportAnchor0 - if (config.exportAnchors) - { - fprintf(ftool, " // Anchor points\n"); - - for(int i = 0; i < MAX_ANCHOR_POINTS; i++) - { - for (int j = 0; j < layout.controlsCount; j++) - { - if (layout.controls[j].ap->id == layout.anchors[i].id) - { - if ((!config.exportAnchor0) && layout.controls[j].ap->id == 0) break; - fprintf(ftool, " Vector2 %s%02i = { %i, %i };\n", "anchor", i, layout.anchors[i].x, layout.anchors[i].y); - break; - } - } - } - } - - if (!config.fullComments) fprintf(ftool, "\n"); - - // Define controls variables - // TODO: Use config.fullComments - for (int i = 0; i < layout.controlsCount; i++) - { - switch (layout.controls[i].type) - { - // Bools - case WINDOWBOX: - case TOGGLE: - { - if (config.fullComments) fprintf(ftool, " \n // %s: %s\n", controlTypeNameLow[layout.controls[i].type], layout.controls[i].name); - fprintf(ftool, " bool %sActive = true;\n", layout.controls[i].name); - } - break; - - case CHECKBOX: - { - if (config.fullComments) fprintf(ftool, " \n // %s: %s\n", controlTypeNameLow[layout.controls[i].type], layout.controls[i].name); - fprintf(ftool, " bool %sChecked = false;\n", layout.controls[i].name); - } - break; - - // Const text - case LABEL: - { - if (config.defineTexts) - { - if (config.fullComments) fprintf(ftool, " \n // %s: %s\n", controlTypeNameLow[layout.controls[i].type], layout.controls[i].name); - fprintf(ftool, " const char *%sText = \"%s\";\n", layout.controls[i].name, layout.controls[i].text); - } - } - break; - - case STATUSBAR: - { - if (config.fullComments) fprintf(ftool, " \n // %s: %s\n", controlTypeNameLow[layout.controls[i].type], layout.controls[i].name); - fprintf(ftool, " char *%sText = \"%s\";\n", layout.controls[i].name, layout.controls[i].text); - } - break; - - case DROPDOWNBOX: - case COMBOBOX: - case LISTVIEW: - case TOGGLEGROUP: - { - if (config.fullComments) fprintf(ftool, " \n // %s: %s\n", controlTypeNameLow[layout.controls[i].type], layout.controls[i].name); - if (config.fullVariables) fprintf(ftool, " int %sCount = 3;\n", layout.controls[i].name); - fprintf(ftool, " int %sActive = 0;\n", layout.controls[i].name); - fprintf(ftool, " const char *%sTextList[3] = { \"ONE\", \"TWO\", \"THREE\" };\n", layout.controls[i].name); - } - break; - - // Floats - case SLIDER: - case SLIDERBAR: - { - if (config.fullComments) fprintf(ftool, " \n // %s: %s\n", controlTypeNameLow[layout.controls[i].type], layout.controls[i].name); - fprintf(ftool, " float %sValue = 50.0f;\n", layout.controls[i].name); - if (config.fullVariables) - { - fprintf(ftool, " const float %sMinValue = 0.0f;\n", layout.controls[i].name); - fprintf(ftool, " const float %sMaxValue = 100.0f;\n", layout.controls[i].name); - } - } - break; - case PROGRESSBAR: - { - if (config.fullComments) fprintf(ftool, " \n // %s: %s\n", controlTypeNameLow[layout.controls[i].type], layout.controls[i].name); - fprintf(ftool, " float %sValue = 50.0f;\n", layout.controls[i].name); - } - break; - - // Ints - case VALUEBOX: - case SPINNER: - { - if (config.fullComments) fprintf(ftool, " \n // %s: %s\n", controlTypeNameLow[layout.controls[i].type], layout.controls[i].name); - fprintf(ftool, " int %sValue = 0;\n", layout.controls[i].name); - } - break; - - // Colors - case COLORPICKER: - { - if (config.fullComments) fprintf(ftool, " \n // %s: %s\n", controlTypeNameLow[layout.controls[i].type], layout.controls[i].name); - fprintf(ftool, " Color %sValue;\n", layout.controls[i].name); - } - break; - - case TEXTBOX: - { - if (config.fullComments) fprintf(ftool, " \n // %s: %s\n", controlTypeNameLow[layout.controls[i].type], layout.controls[i].name); - if (config.fullVariables) fprintf(ftool, " int %sSize = %i;\n", layout.controls[i].name, MAX_CONTROL_TEXT_LENGTH); - fprintf(ftool, " char %sText[%i] = \"%s\";\n", layout.controls[i].name, MAX_CONTROL_TEXT_LENGTH, layout.controls[i].text); - } - default: break; - } - } - - if (config.defineRecs) - { - // Define controls rectangles - fprintf(ftool, "\n // Define controls rectangles\n"); - fprintf(ftool, " Rectangle layoutRecs[%i] = {\n", layout.controlsCount); - - for (int i = 0; i < layout.controlsCount; i++) - { - fprintf(ftool, " %s", GetControlAnchorRec(layout.controls[i].ap->id, layout.controls[i].rec, config)); - - if (i == layout.controlsCount - 1) fprintf(ftool, " // %s: %s\n };\n\n", controlTypeNameLow[layout.controls[i].type], layout.controls[i].name); - else fprintf(ftool, ", // %s: %s\n", controlTypeNameLow[layout.controls[i].type], layout.controls[i].name); - } - } - - fprintf(ftool, " //----------------------------------------------------------------------------------\n\n"); - - fprintf(ftool, " SetTargetFPS(60);\n"); - fprintf(ftool, " //--------------------------------------------------------------------------------------\n\n"); - fprintf(ftool, " // Main game loop\n"); - fprintf(ftool, " while (!WindowShouldClose()) // Detect window close button or ESC key\n"); - fprintf(ftool, " {\n"); - fprintf(ftool, " // Update\n"); - fprintf(ftool, " //----------------------------------------------------------------------------------\n"); - fprintf(ftool, " // TODO: Implement required update logic\n"); - fprintf(ftool, " //----------------------------------------------------------------------------------\n\n"); - fprintf(ftool, " // Draw\n"); - fprintf(ftool, " //----------------------------------------------------------------------------------\n"); - fprintf(ftool, " BeginDrawing();\n\n"); - fprintf(ftool, " ClearBackground(GetColor(style[DEFAULT_BACKGROUND_COLOR]));\n\n"); - - fprintf(ftool, " // raygui: controls drawing\n"); - fprintf(ftool, " //----------------------------------------------------------------------------------\n"); - - // Draw all controls - if (!config.defineRecs) - { - for (int i = 0; i < layout.controlsCount; i++) - { - switch (layout.controls[i].type) - { - case LABEL: - { - if (config.defineTexts) fprintf(ftool, " GuiLabel(%s, %sText);\n", GetControlAnchorRec(layout.controls[i].ap->id, layout.controls[i].rec, config), layout.controls[i].name); - else fprintf(ftool, " GuiLabel(%s, \"%s\");\n", GetControlAnchorRec(layout.controls[i].ap->id, layout.controls[i].rec, config), layout.controls[i].text); - } - break; - case BUTTON: fprintf(ftool, " if (GuiButton(%s, \"%s\")) %s(); \n\n", GetControlAnchorRec(layout.controls[i].ap->id, layout.controls[i].rec, config), layout.controls[i].text, layout.controls[i].name); break; - case VALUEBOX: fprintf(ftool, " %sValue = GuiValueBox(%s, %sValue, 100);\n", layout.controls[i].name, GetControlAnchorRec(layout.controls[i].ap->id, layout.controls[i].rec, config), layout.controls[i].name); break; - case TOGGLE: fprintf(ftool, " %sActive = GuiToggleButton(%s, \"%s\", %sActive);\n", layout.controls[i].name, GetControlAnchorRec(layout.controls[i].ap->id, layout.controls[i].rec, config), layout.controls[i].text, layout.controls[i].name); break; - case TOGGLEGROUP: fprintf(ftool, " %sActive = GuiToggleGroup(%s, %sTextList, %s, %sActive);\n", layout.controls[i].name, GetControlAnchorRec(layout.controls[i].ap->id, layout.controls[i].rec, config), layout.controls[i].name, ExportFullVariables(layout.controls[i].type, layout.controls[i].name, config), layout.controls[i].name); break; - case SLIDER: - { - if (layout.controls[i].text[0] != '\0') fprintf(ftool, " %sValue = GuiSliderEx(%s, %sValue, %s, \"%s\", true);\n", layout.controls[i].name, GetControlAnchorRec(layout.controls[i].ap->id, layout.controls[i].rec, config), layout.controls[i].name, ExportFullVariables(layout.controls[i].type, layout.controls[i].name, config), layout.controls[i].text); - else fprintf(ftool, " %sValue = GuiSlider(%s, %sValue, %s);\n", layout.controls[i].name, GetControlAnchorRec(layout.controls[i].ap->id, layout.controls[i].rec, config), layout.controls[i].name, ExportFullVariables(layout.controls[i].type, layout.controls[i].name, config)); - } break; - case SLIDERBAR: - { - if (layout.controls[i].text[0] != '\0') fprintf(ftool, " %sValue = GuiSliderBarEx(%s, %sValue, %s, \"%s\", true);\n", layout.controls[i].name, GetControlAnchorRec(layout.controls[i].ap->id, layout.controls[i].rec, config), layout.controls[i].name, ExportFullVariables(layout.controls[i].type, layout.controls[i].name, config), layout.controls[i].text); - else fprintf(ftool, " %sValue = GuiSliderBar(%s, %sValue, %s);\n", layout.controls[i].name, GetControlAnchorRec(layout.controls[i].ap->id, layout.controls[i].rec, config), layout.controls[i].name, ExportFullVariables(layout.controls[i].type, layout.controls[i].name, config)); - } break; - case PROGRESSBAR: fprintf(ftool, " %sValue = GuiProgressBarEx(%s, %sValue, 0, 100, true);\n", layout.controls[i].name, GetControlAnchorRec(layout.controls[i].ap->id, layout.controls[i].rec, config), layout.controls[i].name); break; - case SPINNER: fprintf(ftool, " %sValue = GuiSpinner(%s, %sValue, 100, 25);\n", layout.controls[i].name, GetControlAnchorRec(layout.controls[i].ap->id, layout.controls[i].rec, config), layout.controls[i].name); break; - case COMBOBOX: fprintf(ftool, " %sActive = GuiComboBox(%s, %sTextList, %s, %sActive);\n", layout.controls[i].name, GetControlAnchorRec(layout.controls[i].ap->id, layout.controls[i].rec, config), layout.controls[i].name, ExportFullVariables(layout.controls[i].type, layout.controls[i].name, config), layout.controls[i].name); break; - case CHECKBOX: - { - if (layout.controls[i].text[0] != '\0') fprintf(ftool, " %sChecked = GuiCheckBoxEx(%s, %sChecked, \"%s\");\n", layout.controls[i].name, GetControlAnchorRec(layout.controls[i].ap->id, layout.controls[i].rec, config), layout.controls[i].name, layout.controls[i].text); - else fprintf(ftool, " %sChecked = GuiCheckBox(%s, %sChecked); \n", layout.controls[i].name, GetControlAnchorRec(layout.controls[i].ap->id, layout.controls[i].rec, config), layout.controls[i].name); - } break; - case LISTVIEW: fprintf(ftool, " %sActive = GuiListView(%s, %sTextList, %s, %sActive);\n", layout.controls[i].name, GetControlAnchorRec(layout.controls[i].ap->id, layout.controls[i].rec, config), layout.controls[i].name, ExportFullVariables(layout.controls[i].type, layout.controls[i].name, config), layout.controls[i].name); break; - case TEXTBOX: fprintf(ftool, " GuiTextBox(%s, %sText, %s, true);\n", GetControlAnchorRec(layout.controls[i].ap->id, layout.controls[i].rec, config), layout.controls[i].name, ExportFullVariables(layout.controls[i].type, layout.controls[i].name, config)); break; - case GROUPBOX: fprintf(ftool, " GuiGroupBox(%s, \"%s\");\n", GetControlAnchorRec(layout.controls[i].ap->id, layout.controls[i].rec, config), layout.controls[i].text); break; - case WINDOWBOX: - { - fprintf(ftool, " if (%sActive)\n {\n", layout.controls[i].name); - fprintf(ftool, " %sActive = !GuiWindowBox(%s, \"%s\");\n", layout.controls[i].name, GetControlAnchorRec(layout.controls[i].ap->id, layout.controls[i].rec, config), layout.controls[i].text); - fprintf(ftool, " }\n"); - }break; - case DUMMYREC: fprintf(ftool, " GuiDummyRec(%s, \"%s\");\n", GetControlAnchorRec(layout.controls[i].ap->id, layout.controls[i].rec, config), layout.controls[i].text); break; - case DROPDOWNBOX: fprintf(ftool, " %sActive = GuiDropdownBox(%s, %sTextList, %s, %sActive);\n", layout.controls[i].name, GetControlAnchorRec(layout.controls[i].ap->id, layout.controls[i].rec, config), layout.controls[i].name, ExportFullVariables(layout.controls[i].type, layout.controls[i].name, config), layout.controls[i].name); break; - case STATUSBAR: fprintf(ftool, " GuiStatusBar(%s, %sText, 10);\n", GetControlAnchorRec(layout.controls[i].ap->id, layout.controls[i].rec, config), layout.controls[i].name); break; - case COLORPICKER: fprintf(ftool, " %sValue = GuiColorPicker(%s, %sValue);\n", layout.controls[i].name, GetControlAnchorRec(layout.controls[i].ap->id, layout.controls[i].rec, config), layout.controls[i].name); break; - case LINE: fprintf(ftool, " GuiLine(%s, 1);\n", GetControlAnchorRec(layout.controls[i].ap->id, layout.controls[i].rec, config)); break; - case PANEL: fprintf(ftool, " GuiPanel(%s);\n", GetControlAnchorRec(layout.controls[i].ap->id, layout.controls[i].rec, config)); break; - - default: break; - } - } - } - else - { - for (int i = 0; i < layout.controlsCount; i++) - { - switch (layout.controls[i].type) - { - case LABEL: - { - if (config.defineTexts) fprintf(ftool, " GuiLabel(layoutRecs[%i], %sText);\n", i, layout.controls[i].name); - else fprintf(ftool, " GuiLabel(layoutRecs[%i], \"%s\");\n", i, layout.controls[i].text); - } break; - case BUTTON: fprintf(ftool, " if (GuiButton(layoutRecs[%i], \"%s\")) %s();\n\n", i, layout.controls[i].text, layout.controls[i].name); break; - case VALUEBOX: fprintf(ftool, " %sValue = GuiValueBox(layoutRecs[%i], %sValue, 100);\n",layout.controls[i].name, i, layout.controls[i].name); break; - case TOGGLE: fprintf(ftool, " %sActive = GuiToggleButton(layoutRecs[%i], \"%s\", %sActive);\n", layout.controls[i].name, i, layout.controls[i].text, layout.controls[i].name); break; - case TOGGLEGROUP: fprintf(ftool, " %sActive = GuiToggleGroup(layoutRecs[%i], %sTextList, %s, %sActive);\n", layout.controls[i].name, i, layout.controls[i].name, ExportFullVariables(layout.controls[i].type, layout.controls[i].name, config), layout.controls[i].name); break; - case SLIDER: - { - if (layout.controls[i].text[0] != '\0') fprintf(ftool, " %sValue = GuiSliderEx(layoutRecs[%i], %sValue, %s, \"%s\", true);\n", layout.controls[i].name, i, layout.controls[i].name, ExportFullVariables(layout.controls[i].type, layout.controls[i].name, config), layout.controls[i].text); - else fprintf(ftool, " %sValue = GuiSlider(layoutRecs[%i], %sValue, %s);\n", layout.controls[i].name, i, layout.controls[i].name, ExportFullVariables(layout.controls[i].type, layout.controls[i].name, config)); - } break; - case SLIDERBAR: - { - if (layout.controls[i].text[0] != '\0') fprintf(ftool, " %sValue = GuiSliderBarEx(layoutRecs[%i], %sValue, %s, \"%s\", true);\n", layout.controls[i].name, i, layout.controls[i].name, ExportFullVariables(layout.controls[i].type, layout.controls[i].name, config), layout.controls[i].text); - else fprintf(ftool, " %sValue = GuiSliderBar(layoutRecs[%i], %sValue, %s);\n", layout.controls[i].name, i, layout.controls[i].name, ExportFullVariables(layout.controls[i].type, layout.controls[i].name, config)); - } break; - case PROGRESSBAR: fprintf(ftool, " %sValue = GuiProgressBarEx(layoutRecs[%i], %sValue, %s, true);\n", layout.controls[i].name, i, layout.controls[i].name, ExportFullVariables(layout.controls[i].type, layout.controls[i].name, config)); break; - case SPINNER: fprintf(ftool, " %sValue = GuiSpinner(layoutRecs[%i], %sValue, 100, 25);\n", layout.controls[i].name, i, layout.controls[i].name); break; - case COMBOBOX: fprintf(ftool, " %sActive = GuiComboBox(layoutRecs[%i], %sTextList, %s, %sActive);\n", layout.controls[i].name, i, layout.controls[i].name, ExportFullVariables(layout.controls[i].type, layout.controls[i].name, config), layout.controls[i].name); break; - case CHECKBOX: - { - if (layout.controls[i].text[0] != '\0') fprintf(ftool, " %sChecked = GuiCheckBoxEx(layoutRecs[%i], %sChecked, \"%s\");\n", layout.controls[i].name, i, layout.controls[i].name, layout.controls[i].text); - else fprintf(ftool, " %sChecked = GuiCheckBox(layoutRecs[%i], %sChecked);\n", layout.controls[i].name, i, layout.controls[i].name); - } break; - case LISTVIEW: fprintf(ftool, " %sActive = GuiListView(layoutRecs[%i], %sTextList, %s, %sActive);\n", layout.controls[i].name, i, layout.controls[i].name, ExportFullVariables(layout.controls[i].type, layout.controls[i].name, config), layout.controls[i].name); break; - case TEXTBOX: fprintf(ftool, " GuiTextBox(layoutRecs[%i], %sText, %s, true);\n", i, layout.controls[i].name, ExportFullVariables(layout.controls[i].type, layout.controls[i].name, config)); break; - case GROUPBOX: fprintf(ftool, " GuiGroupBox(layoutRecs[%i], \"%s\");\n", i, layout.controls[i].text); break; - case WINDOWBOX: - { - fprintf(ftool, " if (%sActive)\n {\n", layout.controls[i].name); - fprintf(ftool, " %sActive = !GuiWindowBox(layoutRecs[%i], \"%s\");\n", layout.controls[i].name, i, layout.controls[i].text); - fprintf(ftool, " }\n"); - }break; - case DUMMYREC: fprintf(ftool, " GuiDummyRec(layoutRecs[%i], \"%s\");\n", i, layout.controls[i].text); break; - case DROPDOWNBOX: fprintf(ftool, " %sActive = GuiDropdownBox(layoutRecs[%i], %sTextList, %sCount, %sActive);\n", layout.controls[i].name, i, layout.controls[i].name, layout.controls[i].name, layout.controls[i].name); break; - case STATUSBAR: fprintf(ftool, " GuiStatusBar(layoutRecs[%i], %sText, 10);\n", i, layout.controls[i].name); break; - case COLORPICKER: fprintf(ftool, " %sValue = GuiColorPicker(layoutRecs[%i], %sValue);\n", layout.controls[i].name, i, layout.controls[i].name); break; - case LINE: fprintf(ftool, " GuiLine(layoutRecs[%i], 1);\n", i); break; - case PANEL: fprintf(ftool, " GuiPanel(layoutRecs[%i]);\n", i); break; - default: break; - } - } - } - fprintf(ftool, " //----------------------------------------------------------------------------------\n\n"); - fprintf(ftool, " EndDrawing();\n"); - fprintf(ftool, " //----------------------------------------------------------------------------------\n"); - fprintf(ftool, " }\n\n"); - fprintf(ftool, " // De-Initialization\n"); - fprintf(ftool, " //--------------------------------------------------------------------------------------\n"); - fprintf(ftool, " CloseWindow(); // Close window and OpenGL context\n"); - fprintf(ftool, " //--------------------------------------------------------------------------------------\n\n"); - fprintf(ftool, " return 0;\n"); - fprintf(ftool, "}\n\n"); - - fprintf(ftool, "//------------------------------------------------------------------------------------\n"); - fprintf(ftool, "// Controls Functions Definitions (local)\n"); - fprintf(ftool, "//------------------------------------------------------------------------------------\n"); - - for (int i = 0; i < layout.controlsCount; i++) - { - if (layout.controls[i].type == BUTTON) - { - fprintf(ftool, "// %s: %s logic\n", controlTypeNameLow[layout.controls[i].type], layout.controls[i].name); - fprintf(ftool, "static void %s()\n{\n // TODO: Implement control logic\n}\n\n", layout.controls[i].name); - } - } - - fclose(ftool); -} - -// Generate C code from .rgl file -static void GenerateCodeFromRGL(const char *fileName) -{ - if (IsFileExtension(fileName, ".rgl")) - { - LoadLayoutRGL(fileName); // Updates global: layout.controls - - int len = strlen(fileName); - char outName[256] = { 0 }; - strcpy(outName, fileName); - outName[len - 3] = 'c'; - outName[len - 2] = '\0'; - - GuiLayoutConfig config; - memset(&config, 0, sizeof(GuiLayoutConfig)); - - config.width = 800; - config.height = 600; - strcpy(config.name, "layout_file_name"); - strcpy(config.version, "1.0-dev"); - strcpy(config.company, "raylib technologies"); - strcpy(config.description, "tool description"); - config.defineRecs = false; - config.exportAnchors = true; - config.exportAnchor0 = false; - config.fullComments = true; - - // Generate C code for gui layout.controls - GenerateCode(outName, config); - } - else printf("Input RGL file not valid\n"); -} diff --git a/tools/rGuiLayout/src/rguilayout.ico b/tools/rGuiLayout/src/rguilayout.ico deleted file mode 100644 index c7e6a9b59ee2065de606dab6d352b8e74c6aa440..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 104508 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 diff --git a/tools/rGuiLayout/src/rguilayout.rc b/tools/rGuiLayout/src/rguilayout.rc deleted file mode 100644 index fd19e35..0000000 --- a/tools/rGuiLayout/src/rguilayout.rc +++ /dev/null @@ -1,27 +0,0 @@ -GLFW_ICON ICON "rguilayout.ico" - -1 VERSIONINFO -FILEVERSION 1,0,0,0 -PRODUCTVERSION 1,0,0,0 -BEGIN - BLOCK "StringFileInfo" - BEGIN - //BLOCK "080904E4" // English UK - BLOCK "040904E4" // English US - BEGIN - //VALUE "CompanyName", "My Company Name" - VALUE "FileDescription", "rGuiLayout - raygui layout editor" - VALUE "FileVersion", "1.0" - VALUE "InternalName", "rguilayout" - VALUE "LegalCopyright", "(c) 2017 raylib technologies (@raysan5)" - //VALUE "OriginalFilename", "raylib_app.exe" - VALUE "ProductName", "rGuiLayout" - VALUE "ProductVersion", "1.0" - END - END - BLOCK "VarFileInfo" - BEGIN - //VALUE "Translation", 0x809, 1252 // English UK - VALUE "Translation", 0x409, 1252 // English US - END -END diff --git a/tools/rGuiLayout/src/rguilayout_icon b/tools/rGuiLayout/src/rguilayout_icon deleted file mode 100644 index 9e2eaa5cecf610c7d1c704d3d063686f28faf0c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 105852 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