1- #include <gtk/gtk.h>
21#include <stdio.h>
32#include <stdlib.h>
43#include <string.h>
54#include <stdint.h>
6- #include <regex.h>
75#include <errno.h>
8- #include <sys/types.h>
9- #include <sys/stat.h>
106#include <unistd.h>
11- #include <amqp.h>
12- #include <amqp_tcp_socket.h>
137#include <assert.h>
148#include <dirent.h>
9+ #include <sys/types.h>
10+ #include <sys/stat.h>
11+
12+ #include <gtk/gtk.h>
13+
14+ #include <regex.h>
1515
16+ #include <amqp.h>
17+ #include <amqp_tcp_socket.h>
1618#include "utils.h"
1719#include "utils.c"
20+
1821#include "b64.h"
1922#include "encode.c"
2023#include "decode.c"
2124
2225#define MAX_ERROR_MSG 0x1000
23- #define MAX_CNTF 50
26+ #define MAX_CNTF 50 // 최대 검출 파일 개수 //
2427
2528typedef struct Data_storage
2629{
@@ -36,13 +39,13 @@ typedef struct Data_storage
3639
3740}data_storage ;
3841
39- data_storage ds [MAX_CNTF ]; // 파일기준의 data구조체 //
42+ data_storage ds [MAX_CNTF ]; // 파일기준의 data구조체 //
4043
41- static gchar * path ; // 파일경로 //
42- static int cntf = 0 ; // 파일개수 cnt //
44+ static gchar * path ; // 파일경로 //
45+ static int cntf = 0 ; // 파일개수 cnt //
4346static char chkfname [20 ];
44- int chk_tf ; // chk_true or false //
45- //uint data_flag = 1; // 어떤종류의 민감정보인지 확인하기위한 flag //
47+ static int chk_tf ; // chk_true or false //
48+ //uint data_flag = 1; // 어떤종류의 민감정보인지 확인하기위한 flag //
4649
4750
4851GtkWidget * detect_window ,
@@ -704,9 +707,9 @@ int chk_user()
704707
705708 return chk_tf ;
706709}
707- /* end of */
710+ /* end of chk_user(); */
708711
709- // main_window //
712+ // main_window function //
710713void m_detect_btn_clicked (GtkButton * m_detect_btn , gpointer * data )
711714{
712715 gtk_widget_show (detect_window );
@@ -727,11 +730,11 @@ void main_window_destroy()
727730
728731 return ;
729732}
730- /* end of main_window */
733+ /* end of main_window function */
731734
732735
733736
734- // detect_window //
737+ // detect_window function //
735738void d_detect_entry_activate (GtkEntry * d_detect_entry , gpointer * data )
736739{
737740 path = (gchar * )gtk_entry_get_text (d_detect_entry );
@@ -769,7 +772,7 @@ void d_folder_btn_clicked (GtkButton *d_folder_btn, gpointer *data)
769772 return ;
770773}
771774
772- // treeview //
775+ // treeview function //
773776enum
774777{
775778 d_treeview_num = 0 ,
@@ -784,6 +787,38 @@ enum
784787 NUM_COLS
785788} ;
786789
790+ gboolean
791+ view_selection_func (GtkTreeSelection * selection ,
792+ GtkTreeModel * model ,
793+ GtkTreePath * path ,
794+ gboolean path_currently_selected ,
795+ gpointer userdata )
796+ {
797+ GtkTreeIter iter ;
798+
799+ if (gtk_tree_model_get_iter (model , & iter , path ))
800+ {
801+ gchar * name ;
802+
803+ gtk_tree_model_get (model , & iter , d_treeview_filelocation , & name , -1 );
804+
805+ if (!path_currently_selected )
806+ {
807+ g_print ("%s is going to be selected.\n" , name );
808+ }
809+
810+ else
811+ {
812+ g_print ("%s is going to be unselected.\n" , name );
813+ }
814+
815+ g_free (name );
816+ }
817+
818+ return TRUE; /* allow selection state to change */
819+ }
820+
821+
787822static GtkTreeModel *
788823create_and_fill_model (void )
789824{
@@ -814,10 +849,11 @@ create_and_fill_model (void)
814849static GtkWidget *
815850create_view_and_model (void )
816851{
817- GtkTreeViewColumn * col ;
852+ GtkTreeViewColumn * col ;
818853 GtkCellRenderer * renderer ;
819854 GtkWidget * view ;
820855 GtkTreeModel * model ;
856+ GtkTreeSelection * selection ;
821857
822858 view = gtk_tree_view_new ();
823859
@@ -899,6 +935,12 @@ create_view_and_model (void)
899935 renderer = gtk_cell_renderer_text_new ();
900936 gtk_tree_view_column_pack_start (col , renderer , TRUE);
901937 gtk_tree_view_column_add_attribute (col , renderer , "text" , d_treeview_filelocation );
938+
939+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (view ));
940+
941+ gtk_tree_selection_set_select_function (selection , view_selection_func , NULL , NULL );
942+
943+
902944
903945 model = create_and_fill_model ();
904946
@@ -907,11 +949,11 @@ create_view_and_model (void)
907949 g_object_unref (model ); // destroy model automatically with view //
908950
909951 gtk_tree_selection_set_mode (gtk_tree_view_get_selection (GTK_TREE_VIEW (view )),
910- GTK_SELECTION_NONE );
952+ GTK_SELECTION_MULTIPLE );
911953
912954 return view ;
913955}
914- /* end of treeview */
956+ /* end of treeview function */
915957
916958
917959void d_detect_btn_clicked (GtkButton * d_detect_btn , gpointer * data )
@@ -957,11 +999,11 @@ void detect_window_destroy (GtkWidget *detect_window, gpointer *data)
957999
9581000 return ;
9591001}
960- /* end of detect_window */
1002+ /* end of detect_window function */
9611003
9621004
9631005
964- // enrollment_window //
1006+ // enrollment_window function //
9651007void e_enroll_btn_clicked (GtkButton * e_enroll_btn , gpointer * data )
9661008{
9671009 gtk_widget_hide (GTK_WIDGET (data ));
@@ -972,14 +1014,14 @@ void e_enroll_btn_clicked (GtkButton *e_enroll_btn, gpointer *data)
9721014
9731015
9741016
975- // setting_setting //
1017+ // setting_window function //
9761018void s_cloese_btn_clicked (GtkButton * setting_window , gpointer * data )
9771019{
9781020 gtk_widget_hide (GTK_WIDGET (data ));
9791021
9801022 return ;
9811023}
982- /* end of setting_setting */
1024+ /* end of setting_window function */
9831025
9841026
9851027
@@ -1009,11 +1051,11 @@ int main (int argc, char *argv[])
10091051 gtk_builder_connect_signals (builder , NULL );
10101052
10111053 g_object_unref (builder );
1012-
1013- chk_user (chk_tf );
1014-
1015- if (chk_tf == FALSE) // TRUE(1)=있다 //
1016- {
1054+
1055+ chk_user (chk_tf );
1056+
1057+ if (chk_tf == FALSE) // TRUE(1)=있다 //
1058+ {
10171059 gtk_widget_show (enrollment_window );
10181060 gtk_main ();
10191061 }
0 commit comments