Update gtk113
This commit is contained in:
parent
361b97e7b8
commit
aa65c62ae0
|
@ -1,7 +1,9 @@
|
||||||
#include "FileWindow.hh"
|
#include "FileWindow.hh"
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
FileWindow::FileWindow()
|
FileWindow::FileWindow()
|
||||||
:vbox(Gtk::ORIENTATION_VERTICAL,5),
|
:parent_str("/"),
|
||||||
|
vbox(Gtk::ORIENTATION_VERTICAL,5),
|
||||||
btnbox(Gtk::ORIENTATION_HORIZONTAL,5)
|
btnbox(Gtk::ORIENTATION_HORIZONTAL,5)
|
||||||
{
|
{
|
||||||
//Initalize Window
|
//Initalize Window
|
||||||
|
@ -55,5 +57,106 @@ btnbox(Gtk::ORIENTATION_HORIZONTAL,5)
|
||||||
m_viewbar.insert(menu_item,-1);
|
m_viewbar.insert(menu_item,-1);
|
||||||
m_viewbar.set_toolbar_style(Gtk::TOOLBAR_ICONS);
|
m_viewbar.set_toolbar_style(Gtk::TOOLBAR_ICONS);
|
||||||
|
|
||||||
|
//Create Store
|
||||||
|
m_liststore = Gtk::ListStore::create(columns);
|
||||||
|
m_liststore->set_default_sort_func(sigc::mem_fun(*this,&FileWindow::sort_func));
|
||||||
|
m_liststore->set_sort_column(-1,Gtk::SORT_ASCENDING);
|
||||||
|
fill_store();
|
||||||
|
|
||||||
|
create_views();
|
||||||
|
vbox.pack_start(m_sw);
|
||||||
|
m_sw.set_policy(Gtk::POLICY_AUTOMATIC,Gtk::POLICY_AUTOMATIC);
|
||||||
|
m_sw.add(stack);
|
||||||
|
|
||||||
show_all_children();
|
show_all_children();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int FileWindow::sort_func(const Gtk::TreeModel::iterator &a,const Gtk::TreeModel::iterator &b){
|
||||||
|
bool is_dir_a,is_dir_b;
|
||||||
|
Glib::ustring name_a,name_b;
|
||||||
|
|
||||||
|
auto row_a=*a,row_b=*b;
|
||||||
|
is_dir_a = row_a[columns.m_col_is_dir];
|
||||||
|
is_dir_b = row_b[columns.m_col_is_dir];
|
||||||
|
name_a = row_a[columns.m_col_display_name];
|
||||||
|
name_b = row_b[columns.m_col_display_name];
|
||||||
|
|
||||||
|
if(!is_dir_a && is_dir_b){
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if(is_dir_a && !is_dir_b){
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if(name_a[0] != '.' && name_b[0] == '.'){
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if(name_a[0] == '.' && name_b[0] != '.'){
|
||||||
|
return -1;
|
||||||
|
}else{
|
||||||
|
return g_utf8_collate(name_a.c_str(),name_b.c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void FileWindow::fill_store(){
|
||||||
|
Gtk::TreeModel::iterator iter;
|
||||||
|
|
||||||
|
//Clear the store
|
||||||
|
m_liststore->clear();
|
||||||
|
|
||||||
|
//Go through the directory and get information
|
||||||
|
try{
|
||||||
|
Glib::Dir dir1(parent_str);
|
||||||
|
bool is_dir;
|
||||||
|
Glib::ustring display_name;
|
||||||
|
std::string dir_name;
|
||||||
|
/* Ignore the files start with '.' when the button is not toggled */
|
||||||
|
do{
|
||||||
|
dir_name = dir1.read_name();
|
||||||
|
//std::cout<<dir_name<<std::endl;
|
||||||
|
|
||||||
|
char * path = g_build_filename(parent_str.c_str(),dir_name.c_str(),NULL);
|
||||||
|
is_dir = Glib::file_test(path,Glib::FILE_TEST_IS_DIR);
|
||||||
|
display_name = Glib::filename_to_utf8(dir_name);
|
||||||
|
|
||||||
|
if(dir_name != ""){
|
||||||
|
auto row=*(m_liststore->append());
|
||||||
|
row[columns.m_col_display_name] = display_name;
|
||||||
|
row[columns.m_col_is_dir] = is_dir;
|
||||||
|
row[columns.m_col_path] = std::string(path);
|
||||||
|
row[columns.m_col_pixbuf] = is_dir ? folder_pixbuf : file_pixbuf;
|
||||||
|
}
|
||||||
|
|
||||||
|
g_free(path);
|
||||||
|
|
||||||
|
}while(dir_name != "");
|
||||||
|
}
|
||||||
|
catch(const Glib::Error &ex){
|
||||||
|
std::cout << ex.what() << std::endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void FileWindow::create_views(){
|
||||||
|
//Initalize IconView
|
||||||
|
m_iconview.set_model(m_liststore);
|
||||||
|
m_iconview.set_text_column(columns.m_col_display_name);
|
||||||
|
m_iconview.set_pixbuf_column(columns.m_col_pixbuf);
|
||||||
|
m_iconview.signal_item_activated().connect(sigc::mem_fun(*this,&FileWindow::item_activated));
|
||||||
|
|
||||||
|
stack.add(m_iconview);
|
||||||
|
stack.add(m_treeview);
|
||||||
|
}
|
||||||
|
|
||||||
|
void FileWindow::item_activated(const Gtk::TreePath &path){
|
||||||
|
auto row = *(m_liststore->get_iter(path));
|
||||||
|
bool is_dir;
|
||||||
|
Glib::ustring path_name;
|
||||||
|
|
||||||
|
path_name = row[columns.m_col_path];
|
||||||
|
is_dir = row[columns.m_col_is_dir];
|
||||||
|
|
||||||
|
if(!is_dir){return ;}
|
||||||
|
|
||||||
|
parent_str = path_name;
|
||||||
|
|
||||||
|
fill_store();
|
||||||
|
}
|
||||||
|
|
|
@ -23,6 +23,7 @@ private:
|
||||||
Gtk::TreeModelColumn<bool> m_col_is_dir;
|
Gtk::TreeModelColumn<bool> m_col_is_dir;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
ModelColumns columns;
|
||||||
Gtk::TreeView m_treeview;
|
Gtk::TreeView m_treeview;
|
||||||
Gtk::IconView m_iconview;
|
Gtk::IconView m_iconview;
|
||||||
Glib::RefPtr<Gtk::TreeSelection> m_selection;
|
Glib::RefPtr<Gtk::TreeSelection> m_selection;
|
||||||
|
@ -42,6 +43,13 @@ private:
|
||||||
Gtk::ScrolledWindow m_sw;
|
Gtk::ScrolledWindow m_sw;
|
||||||
Gtk::Button view_button;
|
Gtk::Button view_button;
|
||||||
Gtk::MenuButton menubtn;
|
Gtk::MenuButton menubtn;
|
||||||
|
Gtk::Stack stack;
|
||||||
|
|
||||||
|
//Initalize Functions
|
||||||
|
void fill_store();
|
||||||
|
void create_views();
|
||||||
|
int sort_func(const Gtk::TreeModel::iterator &a,const Gtk::TreeModel::iterator &b);
|
||||||
|
|
||||||
//Signal Handlers
|
//Signal Handlers
|
||||||
|
void item_activated(const Gtk::TreePath &path);
|
||||||
};
|
};
|
|
@ -0,0 +1,12 @@
|
||||||
|
#include <iostream>
|
||||||
|
#include <cstdio>
|
||||||
|
#include <cstdlib>
|
||||||
|
|
||||||
|
int main(int argc,char *argv[])
|
||||||
|
{
|
||||||
|
int x;
|
||||||
|
srand((unsigned)time(NULL));
|
||||||
|
x=rand();
|
||||||
|
std::cout<<x%100<<" "<<x<<std::endl;
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in New Issue