This commit is contained in:
ghorvath
2010-04-16 10:29:18 +00:00
parent 71b74bbfd2
commit 68c4f03a59
205 changed files with 7112 additions and 15069 deletions

View File

@@ -22,6 +22,7 @@
#include <windows.h>
#endif
#include <options.h>
#include <safegtk.h>
#define CHECKTIME 5000
extern Glib::ustring argv0;
@@ -47,16 +48,16 @@ DirBrowser::DirBrowser () {
dirtree->show ();
scrolledwindow4->show ();
}
void DirBrowser::fillDirTree () {
openfolder = Gdk::Pixbuf::create_from_file (argv0+"/images/folder_open.png");
closedfolder = Gdk::Pixbuf::create_from_file (argv0+"/images/folder.png");
icdrom = Gdk::Pixbuf::create_from_file (argv0+"/images/cdrom.png");
ifloppy = Gdk::Pixbuf::create_from_file (argv0+"/images/floppy.png");
ihdd = Gdk::Pixbuf::create_from_file (argv0+"/images/hdd.png");
iremovable = Gdk::Pixbuf::create_from_file (argv0+"/images/usbpendrive.png");
inetwork = Gdk::Pixbuf::create_from_file (argv0+"/images/network.png");
openfolder = safe_create_from_file (argv0+"/images/folder_open.png");
closedfolder = safe_create_from_file (argv0+"/images/folder.png");
icdrom = safe_create_from_file (argv0+"/images/cdrom.png");
ifloppy = safe_create_from_file (argv0+"/images/floppy.png");
ihdd = safe_create_from_file (argv0+"/images/hdd.png");
iremovable = safe_create_from_file (argv0+"/images/usbpendrive.png");
inetwork = safe_create_from_file (argv0+"/images/network.png");
//Create the Tree model:
dirTreeModel = Gtk::TreeStore::create(dtColumns);
@@ -198,38 +199,33 @@ void DirBrowser::row_expanded (const Gtk::TreeModel::iterator& iter, const Gtk::
int todel = iter->children().size();
try {
std::vector<Glib::ustring> subDirs;
Glib::RefPtr<Gio::File> dir = Gio::File::create_for_path (iter->get_value (dtColumns.dirname));
if (!dir)
return;
Glib::RefPtr<Gio::FileEnumerator> dirList = dir->enumerate_children ();
try {
for (Glib::RefPtr<Gio::FileInfo> info = dirList->next_file(); info; info = dirList->next_file())
if (info->get_file_type() == Gio::FILE_TYPE_DIRECTORY && (!info->is_hidden() || options.fbShowHidden))
subDirs.push_back (info->get_name());
}
catch (...) {}
std::sort (subDirs.begin(), subDirs.end());
for (int i=0; i<subDirs.size(); i++)
addDir (iter, subDirs[i]);
Glib::RefPtr<Gio::File> dir = Gio::File::create_for_path (iter->get_value (dtColumns.dirname));
safe_build_subdir_list (dir, subDirs, options.fbShowHidden);
if (subDirs.size() == 0)
dirtree->collapse_row (path);
else {
std::sort (subDirs.begin(), subDirs.end());
for (int i=0; i<subDirs.size(); i++)
addDir (iter, subDirs[i]);
for (int i=0; i<todel; i++)
dirTreeModel->erase (iter->children().begin());
expandSuccess = true;
for (int i=0; i<todel; i++)
dirTreeModel->erase (iter->children().begin());
expandSuccess = true;
}
#ifdef _WIN32
Glib::RefPtr<WinDirMonitor> monitor = Glib::RefPtr<WinDirMonitor>(new WinDirMonitor (iter->get_value (dtColumns.dirname), this));
iter->set_value (dtColumns.monitor, monitor);
Glib::RefPtr<WinDirMonitor> monitor = Glib::RefPtr<WinDirMonitor>(new WinDirMonitor (iter->get_value (dtColumns.dirname), this));
iter->set_value (dtColumns.monitor, monitor);
#elif defined __APPLE__
printf("TODO fix dir->monitor_directory () for OSX\n");
#else
Glib::RefPtr<Gio::FileMonitor> monitor = dir->monitor_directory ();
iter->set_value (dtColumns.monitor, monitor);
monitor->signal_changed().connect (sigc::bind(sigc::mem_fun(*this, &DirBrowser::file_changed), iter, dir->get_parse_name()));
Glib::RefPtr<Gio::FileMonitor> monitor = dir->monitor_directory ();
iter->set_value (dtColumns.monitor, monitor);
monitor->signal_changed().connect (sigc::bind(sigc::mem_fun(*this, &DirBrowser::file_changed), iter, dir->get_parse_name()));
#endif
}
catch (Glib::Exception &ex) {
printf ("HEJJ!\n");
dirtree->collapse_row (path);
}
}
void DirBrowser::updateDir (const Gtk::TreeModel::iterator& iter) {
@@ -247,29 +243,17 @@ void DirBrowser::updateDir (const Gtk::TreeModel::iterator& iter) {
}
}
// test if new files are created
try {
std::vector<Glib::ustring> subDirs;
Glib::RefPtr<Gio::File> dir = Gio::File::create_for_path (iter->get_value (dtColumns.dirname));
if (!dir)
return;
Glib::RefPtr<Gio::FileEnumerator> dirList = dir->enumerate_children ();
for (Glib::RefPtr<Gio::FileInfo> info = dirList->next_file(); info; info = dirList->next_file())
if (info->get_file_type() == Gio::FILE_TYPE_DIRECTORY && (!info->is_hidden() || options.fbShowHidden))
subDirs.push_back (info->get_name());
std::vector<Glib::ustring> subDirs;
Glib::RefPtr<Gio::File> dir = Gio::File::create_for_path (iter->get_value (dtColumns.dirname));
safe_build_subdir_list (dir, subDirs, options.fbShowHidden);
for (int i=0; i<subDirs.size(); i++) {
bool found = false;
for (Gtk::TreeModel::iterator it=iter->children().begin(); it!=iter->children().end(); it++)
if (it->get_value (dtColumns.filename)==subDirs[i]) {
found = true;
break;
}
if (!found)
addDir (iter, subDirs[i]);
}
}
catch (Glib::Exception &ex) {
printf ("HEJJ!\n");
for (int i=0; i<subDirs.size(); i++) {
bool found = false;
for (Gtk::TreeModel::iterator it=iter->children().begin(); it!=iter->children().end() && !found ; it++)
found = (it->get_value (dtColumns.filename)==subDirs[i]);
if (!found)
addDir (iter, subDirs[i]);
}
}
@@ -289,7 +273,7 @@ void DirBrowser::addDir (const Gtk::TreeModel::iterator& iter, const Glib::ustri
void DirBrowser::row_activated (const Gtk::TreeModel::Path& path, Gtk::TreeViewColumn* column) {
Glib::ustring dname = dirTreeModel->get_iter (path)->get_value (dtColumns.dirname);
if (Glib::file_test (dname, Glib::FILE_TEST_IS_DIR))
if (Glib::file_test (dname, Glib::FILE_TEST_IS_DIR))
for (int i=0; i<dllisteners.size(); i++)
dllisteners[i]->dirSelected (dname);
}
@@ -301,9 +285,8 @@ Gtk::TreePath DirBrowser::expandToDir (const Glib::ustring& absDirPath) {
int end = 0;
int beg = 0;
char* dir = new char [1024];
char* dcpy = strdup (absDirPath.c_str());
dir = strtok (dcpy, "/\\");
char* dir = strtok (dcpy, "/\\");
int count = 0;
expandSuccess = true;
@@ -344,8 +327,7 @@ Gtk::TreePath DirBrowser::expandToDir (const Glib::ustring& absDirPath) {
dir = strtok(NULL, "/\\");
}
delete dir;
delete dcpy;
free(dcpy);
path.up ();
dirtree->expand_to_path (path);
@@ -377,8 +359,9 @@ void DirBrowser::file_changed (const Glib::RefPtr<Gio::File>& file, const Glib::
updateDir (iter);
gdk_threads_leave();
}
void DirBrowser::selectDir (Glib::ustring dir) {
void DirBrowser::selectDir (Glib::ustring dir) {
open (dir, "");
}
}