mirror of https://github.com/buggins/dlangui.git
refactor file operations
This commit is contained in:
parent
a682fd63bc
commit
f7409f6c07
|
@ -294,6 +294,7 @@
|
|||
<Folder name="core">
|
||||
<File path="src\dlangui\core\collections.d" />
|
||||
<File path="src\dlangui\core\events.d" />
|
||||
<File path="src\dlangui\core\files.d" />
|
||||
<File path="src\dlangui\core\i18n.d" />
|
||||
<File path="src\dlangui\core\linestream.d" />
|
||||
<File path="src\dlangui\core\logger.d" />
|
||||
|
|
|
@ -63,3 +63,4 @@ public import dlangui.widgets.tree;
|
|||
public import dlangui.widgets.combobox;
|
||||
public import dlangui.graphics.fonts;
|
||||
public import dlangui.core.i18n;
|
||||
public import dlangui.core.files;
|
||||
|
|
|
@ -58,6 +58,7 @@ module dlangui.core.i18n;
|
|||
|
||||
import dlangui.core.types;
|
||||
import dlangui.core.logger;
|
||||
import dlangui.core.files;
|
||||
private import dlangui.core.linestream;
|
||||
private import std.utf;
|
||||
private import std.algorithm;
|
||||
|
|
|
@ -390,82 +390,3 @@ dchar dcharToUpper(dchar ch) {
|
|||
return ch;
|
||||
}
|
||||
|
||||
version (Windows) {
|
||||
/// path delimiter (\ for windows, / for others)
|
||||
immutable char PATH_DELIMITER = '\\';
|
||||
} else {
|
||||
/// path delimiter (\ for windows, / for others)
|
||||
immutable char PATH_DELIMITER = '/';
|
||||
}
|
||||
|
||||
/** returns true if char ch is / or \ slash */
|
||||
bool isPathDelimiter(char ch) {
|
||||
return ch == '/' || ch == '\\';
|
||||
}
|
||||
|
||||
/** returns current executable path only, including last path delimiter */
|
||||
@property string exePath() {
|
||||
import std.file;
|
||||
string path = thisExePath();
|
||||
int lastSlash = 0;
|
||||
for (int i = 0; i < path.length; i++)
|
||||
if (path[i] == PATH_DELIMITER)
|
||||
lastSlash = i;
|
||||
return path[0 .. lastSlash + 1];
|
||||
}
|
||||
|
||||
/// converts path delimiters to standard for platform inplace in buffer(e.g. / to \ on windows, \ to / on posix), returns buf
|
||||
char[] convertPathDelimiters(char[] buf) {
|
||||
foreach(ref ch; buf) {
|
||||
version (Windows) {
|
||||
if (ch == '/')
|
||||
ch = '\\';
|
||||
} else {
|
||||
if (ch == '\\')
|
||||
ch = '/';
|
||||
}
|
||||
}
|
||||
return buf;
|
||||
}
|
||||
|
||||
/** converts path delimiters to standard for platform (e.g. / to \ on windows, \ to / on posix) */
|
||||
string convertPathDelimiters(string src) {
|
||||
char[] buf = src.dup;
|
||||
return cast(string)convertPathDelimiters(buf);
|
||||
}
|
||||
|
||||
/** appends file path parts with proper delimiters e.g. appendPath("/home/user", ".myapp", "config") => "/home/user/.myapp/config" */
|
||||
string appendPath(string[] pathItems ...) {
|
||||
char[] buf;
|
||||
foreach (s; pathItems) {
|
||||
if (buf.length && !isPathDelimiter(buf[$-1]))
|
||||
buf ~= PATH_DELIMITER;
|
||||
buf ~= s;
|
||||
}
|
||||
return convertPathDelimiters(buf).dup;
|
||||
}
|
||||
|
||||
/** appends file path parts with proper delimiters (as well converts delimiters inside path to system) to buffer e.g. appendPath("/home/user", ".myapp", "config") => "/home/user/.myapp/config" */
|
||||
char[] appendPath(char[] buf, string[] pathItems ...) {
|
||||
foreach (s; pathItems) {
|
||||
if (buf.length && !isPathDelimiter(buf[$-1]))
|
||||
buf ~= PATH_DELIMITER;
|
||||
buf ~= s;
|
||||
}
|
||||
return convertPathDelimiters(buf);
|
||||
}
|
||||
|
||||
/** split path into elements, e.g. /home/user/dir1 -> ["home", "user", "dir1"], "c:\dir1\dir2" -> ["c:", "dir1", "dir2"] */
|
||||
string[] splitPath(string path) {
|
||||
string[] res;
|
||||
int start = 0;
|
||||
for (int i = 0; i <= path.length; i++) {
|
||||
char ch = i < path.length ? path[i] : 0;
|
||||
if (ch == '\\' || ch == '/' || ch == 0) {
|
||||
if (start < i)
|
||||
res ~= path[start .. i].dup;
|
||||
start = i + 1;
|
||||
}
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
|
|
@ -26,6 +26,7 @@ module dlangui.dialogs.filedlg;
|
|||
import dlangui.core.events;
|
||||
import dlangui.core.i18n;
|
||||
import dlangui.core.stdaction;
|
||||
import dlangui.core.files;
|
||||
import dlangui.widgets.controls;
|
||||
import dlangui.widgets.lists;
|
||||
import dlangui.widgets.popup;
|
||||
|
|
|
@ -28,6 +28,7 @@ import std.file;
|
|||
|
||||
import dlangui.core.logger;
|
||||
import dlangui.core.events;
|
||||
import dlangui.core.files;
|
||||
import dlangui.graphics.drawbuf;
|
||||
import dlangui.graphics.fonts;
|
||||
import dlangui.graphics.ftfonts;
|
||||
|
|
|
@ -39,6 +39,7 @@ import dlangui.graphics.drawbuf;
|
|||
import dlangui.graphics.images;
|
||||
import dlangui.graphics.fonts;
|
||||
import dlangui.core.logger;
|
||||
import dlangui.core.files;
|
||||
|
||||
version (USE_OPENGL) {
|
||||
import dlangui.graphics.glsupport;
|
||||
|
|
|
@ -1,32 +1,55 @@
|
|||
// Written in the D programming language.
|
||||
|
||||
/**
|
||||
|
||||
This module contains implementation of Win32 platform support
|
||||
|
||||
Provides XCB platform and window classes.
|
||||
|
||||
Usually you don't need to use this module directly.
|
||||
|
||||
NOTE: Current implementation of XCB backend does not work well. Consider using of SDL2 backend instead.
|
||||
|
||||
Synopsis:
|
||||
|
||||
----
|
||||
import dlangui.platforms.x11.x11app;
|
||||
----
|
||||
|
||||
Copyright: Vadim Lopatin, 2014
|
||||
License: Boost License 1.0
|
||||
Authors: Vadim Lopatin, coolreader.org@gmail.com
|
||||
*/
|
||||
module src.dlangui.platforms.x11.x11app;
|
||||
|
||||
version(USE_XCB) {
|
||||
version(USE_XCB):
|
||||
|
||||
import std.string;
|
||||
import std.c.linux.X11.xcb.xcb;
|
||||
import std.c.linux.X11.xcb.shm;
|
||||
import std.c.linux.X11.xcb.xproto;
|
||||
import std.c.linux.X11.xcb.image;
|
||||
import std.c.linux.X11.keysymdef;
|
||||
import std.c.linux.linux;
|
||||
import std.c.stdlib;
|
||||
import std.conv;
|
||||
import std.string;
|
||||
import std.c.linux.X11.xcb.xcb;
|
||||
import std.c.linux.X11.xcb.shm;
|
||||
import std.c.linux.X11.xcb.xproto;
|
||||
import std.c.linux.X11.xcb.image;
|
||||
import std.c.linux.X11.keysymdef;
|
||||
import std.c.linux.linux;
|
||||
import std.c.stdlib;
|
||||
import std.conv;
|
||||
|
||||
import dlangui.core.logger;
|
||||
import dlangui.core.events;
|
||||
import dlangui.graphics.drawbuf;
|
||||
import dlangui.graphics.fonts;
|
||||
import dlangui.graphics.ftfonts;
|
||||
import dlangui.graphics.resources;
|
||||
import dlangui.widgets.styles;
|
||||
import dlangui.platforms.common.platform;
|
||||
import dlangui.core.logger;
|
||||
import dlangui.core.events;
|
||||
import dlangui.core.files;
|
||||
import dlangui.graphics.drawbuf;
|
||||
import dlangui.graphics.fonts;
|
||||
import dlangui.graphics.ftfonts;
|
||||
import dlangui.graphics.resources;
|
||||
import dlangui.widgets.styles;
|
||||
import dlangui.platforms.common.platform;
|
||||
|
||||
version (USE_OPENGL) {
|
||||
version (USE_OPENGL) {
|
||||
import dlangui.graphics.glsupport;
|
||||
}
|
||||
}
|
||||
|
||||
import derelict.opengl3.gl3;
|
||||
import derelict.opengl3.glx;
|
||||
import derelict.opengl3.gl3;
|
||||
import derelict.opengl3.glx;
|
||||
|
||||
// pragma(lib, "xcb");
|
||||
// pragma(lib, "xcb-shm");
|
||||
|
@ -35,37 +58,37 @@ version(USE_XCB) {
|
|||
// pragma(lib, "X11");
|
||||
// pragma(lib, "dl");
|
||||
|
||||
extern (System)
|
||||
xcb_connection_t *XGetXCBConnection(std.c.linux.X11.Xlib.Display *dpy);
|
||||
enum XEventQueueOwner { XlibOwnsEventQueue = 0, XCBOwnsEventQueue };
|
||||
extern (System)
|
||||
void XSetEventQueueOwner(std.c.linux.X11.Xlib.Display *dpy, XEventQueueOwner owner);
|
||||
extern (System)
|
||||
xcb_connection_t *XGetXCBConnection(std.c.linux.X11.Xlib.Display *dpy);
|
||||
enum XEventQueueOwner { XlibOwnsEventQueue = 0, XCBOwnsEventQueue };
|
||||
extern (System)
|
||||
void XSetEventQueueOwner(std.c.linux.X11.Xlib.Display *dpy, XEventQueueOwner owner);
|
||||
|
||||
struct xcb_key_symbols_t {};
|
||||
/* enumeration for col parameter? */
|
||||
enum xcb_lookup_t {
|
||||
struct xcb_key_symbols_t {};
|
||||
/* enumeration for col parameter? */
|
||||
enum xcb_lookup_t {
|
||||
xcb_lookup_none_t = 1,
|
||||
xcb_lookup_chars_t = 2,
|
||||
xcb_lookup_key_sym_t = 3,
|
||||
xcb_lookup_both_t = 4
|
||||
};
|
||||
};
|
||||
|
||||
extern(C) xcb_key_symbols_t *xcb_key_symbols_alloc (xcb_connection_t *c);
|
||||
extern(C) xcb_key_symbols_t *xcb_key_symbols_alloc (xcb_connection_t *c);
|
||||
|
||||
extern(C) void xcb_key_symbols_free (xcb_key_symbols_t *syms);
|
||||
extern(C) void xcb_key_symbols_free (xcb_key_symbols_t *syms);
|
||||
|
||||
extern(C) xcb_keysym_t xcb_key_symbols_get_keysym (xcb_key_symbols_t *syms,
|
||||
extern(C) xcb_keysym_t xcb_key_symbols_get_keysym (xcb_key_symbols_t *syms,
|
||||
xcb_keycode_t keycode,
|
||||
int col);
|
||||
|
||||
extern(C) xcb_keysym_t xcb_key_press_lookup_keysym (xcb_key_symbols_t *syms,
|
||||
extern(C) xcb_keysym_t xcb_key_press_lookup_keysym (xcb_key_symbols_t *syms,
|
||||
xcb_key_press_event_t *event,
|
||||
int col);
|
||||
|
||||
extern(C) xcb_keysym_t xcb_key_release_lookup_keysym (xcb_key_symbols_t *syms,
|
||||
extern(C) xcb_keysym_t xcb_key_release_lookup_keysym (xcb_key_symbols_t *syms,
|
||||
xcb_key_release_event_t *event,
|
||||
int col);
|
||||
class XCBWindow : Window {
|
||||
class XCBWindow : Window {
|
||||
xcb_window_t _w;
|
||||
xcb_gcontext_t _g;
|
||||
xcb_image_t * _image;
|
||||
|
@ -791,15 +814,15 @@ version(USE_XCB) {
|
|||
}
|
||||
return res;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private __gshared xcb_connection_t * _xcbconnection;
|
||||
private __gshared xcb_screen_t * _xcbscreen;
|
||||
private __gshared ubyte _xcbscreendepth;
|
||||
private __gshared bool _enableOpengl;
|
||||
private __gshared std.c.linux.X11.Xlib.Display * _display;
|
||||
private __gshared xcb_connection_t * _xcbconnection;
|
||||
private __gshared xcb_screen_t * _xcbscreen;
|
||||
private __gshared ubyte _xcbscreendepth;
|
||||
private __gshared bool _enableOpengl;
|
||||
private __gshared std.c.linux.X11.Xlib.Display * _display;
|
||||
|
||||
class XCBPlatform : Platform {
|
||||
class XCBPlatform : Platform {
|
||||
this() {
|
||||
|
||||
}
|
||||
|
@ -1122,13 +1145,13 @@ version(USE_XCB) {
|
|||
}
|
||||
|
||||
protected XCBWindow[xcb_window_t] _windowMap;
|
||||
}
|
||||
}
|
||||
|
||||
// entry point
|
||||
extern(C) int UIAppMain(string[] args);
|
||||
// entry point
|
||||
extern(C) int UIAppMain(string[] args);
|
||||
|
||||
int main(string[] args)
|
||||
{
|
||||
int main(string[] args)
|
||||
{
|
||||
|
||||
setStderrLogger();
|
||||
Log.setLogLevel(LogLevel.Trace);
|
||||
|
@ -1168,6 +1191,4 @@ version(USE_XCB) {
|
|||
Log.d("Exiting main");
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue