File: filedialog_generic.h

package info (click to toggle)
clanlib 0.5.4-1-6
  • links: PTS
  • area: main
  • in suites: woody
  • size: 10,320 kB
  • ctags: 10,893
  • sloc: cpp: 76,056; xml: 3,281; sh: 2,961; perl: 1,204; asm: 837; makefile: 775
file content (142 lines) | stat: -rw-r--r-- 3,191 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
/*
	$Id: filedialog_generic.h,v 1.13 2001/12/27 23:14:03 sphair Exp $
	
	ClanGUI, copyrights by various people. Have a look in the CREDITS file.
	
	This sourcecode is distributed using the Library GNU Public Licence,
	version 2 or (at your option) any later version. Please read LICENSE
	for details.
*/

#ifndef header_file_dialog_generic
#define header_file_dialog_generic

#include <string>

#include "API/Core/System/clanstring.h"
#include "API/signals.h"
#include "API/GUI/window.h"
#include "API/GUI/label.h"
#include "API/GUI/inputbox.h"
#include "API/GUI/button.h"

class CL_ComponentOptions;
class CL_FileDialog;
class CL_StyleManager;
class CL_ListBox;

/////////////////////////////////////////////////////////////////////////////
// CL_FileDialog_NewDir

class CL_FileDialog_CreateDir : public CL_Window
{
// Construction
public:
	CL_FileDialog_CreateDir(CL_Component *parent);

	std::string file;

// Implementation
private:
	void on_quit(bool ok);

	CL_Label label;
	CL_InputBox input;
	CL_Button button_ok;
	CL_Button button_cancel;

	CL_Slot slot_button_ok;
	CL_Slot slot_button_cancel;
};

/////////////////////////////////////////////////////////////////////////////
// CL_FileDialog_Generic

class CL_FileDialog_Generic
{
// Construction
public:
	CL_FileDialog_Generic(
		CL_FileDialog *self,
		const std::string &title,
		const std::string &file,
		const std::string &filter);
	~CL_FileDialog_Generic();

// Attributes
public:
	const std::string &get_file() const;
	const std::string &get_filter() const;
	const std::string &get_dir() const;
	const std::string &get_path() const;
	bool is_hidden_files_visible() const;

// Operations
public:
	void set_file(const std::string &filename, bool refresh = true);
	void set_dir(const std::string &dir, bool refresh = true);
	void set_filter(const std::string &filter, bool refresh = true);
	void show_hidden_files(bool enable);
	void refresh();

// Slots:
private:
	CL_Slot slot_file_activated;
	CL_Slot slot_button_ok;
	CL_Slot slot_button_cancel;
	CL_Slot slot_button_parent;
	CL_Slot slot_button_createdir;
	CL_Slot slot_input_dir;
	CL_Slot slot_input_file;
	CL_Slot slot_input_filter;
	CL_Slot slot_set_options;

// Callbacks:
public:
	void on_file_activated(int index);
	void on_button_quit(bool ok);
	void on_button_parent();
	void on_button_createdir();
	void on_edit_dir();
	void on_edit_file();
	void on_edit_filter();
	void on_set_options(const CL_ComponentOptions &options);

// Signals:
public:
	CL_Signal_v1<const std::string &> sig_file_highlighted;
	CL_Signal_v1<const std::string &> sig_file_selected;
	CL_Signal_v1<const std::string &> sig_dir_entered;

// Implementation:
private:
	bool check_filter(CL_String text, CL_String filter, bool case_sensitive = false);
	void read_dir();

	CL_FileDialog *filedialog;

	bool show_hidden;

	CL_Label *label_dir;
	CL_InputBox *input_dir;
	CL_Button *button_parent;
	CL_Button *button_createdir;

	CL_ListBox *listbox_files;

	CL_Label *label_file;
	CL_InputBox *input_file;

	CL_Label *label_filter;
	CL_InputBox *input_filter;

	CL_Button *button_ok;
	CL_Button *button_cancel;

	std::string file;
	std::string filter;
	std::string dir;
	std::string path;
};

#endif