/*
* @Author: Fu Zhuoyue
* @Date: 2023-07-20 21:39:45
* @LastEditors: Fu Zhuoyue
* @LastEditTime: 2023-07-24 13:50:30
* @Description:
* @FilePath: /share_file/syscoding_project/usr/src/main.c
*/
#include "syshead.h"
#include "show_bmp.h"
#include "lcd.h"
#include "thread_pool.h"
#include "copyfile.h"
#include "font.h"
#include "show_mypng.h"
#include "list.h"
#include "kernel_list.h"
#include "drawpic.h"
#define FONTPATH "/usr/share/fonts/simfang.ttf"
#define PNGPATH "/data/copyfile/resource"
#define LENGTHMX 256
//枚举文件类型
enum FILE_TAIL{
FILETYPE = 0,
PNG,
C,
H,
TXT,
OTHER
};
extern unsigned int total_file_num;
typedef struct FileNode{
FileStrc file;
struct list_head list;
}FileNode;
struct png_info_data file[6];
struct png_info_data icon_png[4];
BasicPIC Icon[4];
font *font_point;
char last_path[80];
char cur_path[80];
#if 1
//存储拷贝文件路径的链表头结点
NodeList *copy_dir_head = NULL;
NodeList *ret_dir_head = NULL;
void Destroy_FileNodelist(struct list_head* my_list) {
FileNode* current_file_node;
FileNode* tmp;
list_for_each_entry_safe(current_file_node, tmp, my_list, list) {
list_del(¤t_file_node->list); // 从链表中删除当前节点
free(current_file_node); // 释放当前节点的内存
}
}
void Init_Icon()
{
Init_Png(&file[0],"/data/copyfile/resource/file.png");
Init_Png(&file[1],"/data/copyfile/resource/png.png");
Init_Png(&file[2],"/data/copyfile/resource/c.png");
Init_Png(&file[3],"/data/copyfile/resource/h.png");
Init_Png(&file[4],"/data/copyfile/resource/txt.png");
Init_Png(&file[5],"/data/copyfile/resource/else.png");
Init_Png(&icon_png[0],"/data/copyfile/resource/close.png");
Init_Png(&icon_png[1],"/data/copyfile/resource/back.png");
Init_Png(&icon_png[2],"/data/copyfile/resource/up.png");
Init_Png(&icon_png[3],"/data/copyfile/resource/down.png");
for(int i = 0;i<4;i++)
Icon[i].png = &icon_png[i];
Icon[0].pos_x = 750; Icon[0].pos_y = 5;
Icon[0].width =30; Icon[0].height = 30;
Icon[1].pos_x = 120; Icon[1].pos_y= 5;
Icon[1].width =30; Icon[1].height = 30;
Icon[2].pos_x = 740; Icon[2].pos_y = 240;
Icon[2].width = 40; Icon[2].height = 40;
Icon[3].pos_x = 740; Icon[3].pos_y = 320;
Icon[3].width = 40; Icon[3].height = 40;
}
void Show_Background(int cur_page,int all_page,int area)
{
FillColor_Rectangle(C_WHITE,0,0,800,480,area);
FillColor_Rectangle(0x413328,0,0,800,40,area);//画顶层框
FillColor_Rectangle(0x605D53,0,40,120,440,area);//画左侧框
char text[4][10] = {"进入","删除","复制","粘贴"};
for(int i = 0;i<4; i++)
{
int x = 160+i*(160);
int y = 400;
FillColor_Rectangle(C_VIOLET,x,y,120,60,area);
ShowFont_WithoutBackground(font_point,lcdpoint,text[i],
x+26,y+12,C_BLACK,36,area );
}
for(int i = 0;i<4; i++)
{
Show_BasicPng(Icon+i,0);
}
//展示当前页
char tempbuf[100] = "当前路径: ";
strcat(tempbuf,cur_path);
ShowFont_WithoutBackground(font_point,lcdpoint,tempbuf,
160,8,C_WHITE,24,area );
bzero(tempbuf,100);
sprintf(tempbuf,"%d/%d",cur_page,all_page);
ShowFont_WithoutBackground(font_point,lcdpoint,tempbuf,
Icon[3].pos_x + 6,Icon[2].pos_y + 40 + 16,C_RED,18,area );
}
/**
* @description: 更新当前实际显示的文件名到FILE链表,在这个过程中顺带完成类型赋值
* @param {NodeList} *dir_head
* @param {FileNode} *filehead
* @param {int} page 第几页
* @return {*}
*/
void Updat_CurDirName_To_FileNode(NodeList *dir_head,FileNode *filehead,int page)
{
NodeList *p_dir = dir_head->next;
// FileNode *p_file = list_entry(filehead->list.next,FileNode, list);
for(int i= 1 ;i< page; i++) //有几页,移动p_dir成为新的首位节点
{
for(int j = 0;j<10;j++)
p_dir = p_dir->next;
}
for( int i = 0 ; p_dir!= dir_head && i<10 ; p_dir = p_dir->next , i++ )
{
// 创建用户节点(大结构体)
FileNode *new = malloc(sizeof(FileNode));
new->file.is_choosen = false;
//定义好图像显示位置
int p_x = 160 + (i%5)*120;
int p_y = 80 +(i/5)*160;
new->file.basic_pic.pos_x = p_x;
new->file.basic_pic.pos_y = p_y;
new->file.basic_pic.width = 80;
new->file.basic_pic.height = 80;
//拷贝文件名字
memcpy(new->file.name,p_dir->data, sizeof(new->file.name));
//拷贝文件路径
char temp_buf[100] = "";
sprintf(temp_buf,"%s/%s",cur_path,p_dir->data);
memcpy(new->file.file_path, temp_buf,sizeof(new->file.file_path));
//赋予文件信息
struct stat info; // 设备信息结构体
stat(temp_buf, &info);
if( S_ISDIR(info.st_mode) ) // 如果是目录
{
new->file.dir_type = FILETYPE;
new->file.basic_pic.png = &file[FILETYPE];
}
else{
printf("tempbuf = %s\n",temp_buf);
if(strstr( temp_buf,".png" ) != NULL)
{
printf("%s is png\n",temp_buf);
new->file.dir_type = PNG;
new->file.basic_pic.png = &file[PNG];
}
else if(strstr( temp_buf,".c" ) != NULL)
{
printf("%s is c\n",temp_buf);
new->file.dir_type = C;
new->file.basic_pic.png = &file[C];
}
else if(strstr( temp_buf,".h" ) != NULL)
{
printf("%s is h\n",temp_buf);
new->file.dir_type = H;
new->file.basic_pic.png = &file[H];
}
else if(strstr( temp_buf,".txt" ) != NULL)
{
printf("%s is txt\n",temp_buf);
new->file.dir_type = TXT;
new->file.basic_pic.png = &file[TXT];
}
else
{
printf("%s is other\n",temp_buf);
new->file.dir_type = OTHER;
new->file.basic_pic.png = &file[OTHER];
}
}
//赋值操作做好后插入头结点(顺序插入)
list_add(&new->list, &filehead->list);
}
}
//显示主要文件部分
void Show_MainFile(FileNode *file_head,int area)
{
struct list_head *pos;
struct list_head *n;
list_for_each_safe(pos, n, &file_head->list)
{
FileNode *tmp = list_entry(pos,FileNode,list);
int x = tmp->file.basic_pic.pos_x;
int y = tmp->file.basic_pic.pos_y;
Show_BasicPng(&(tmp->file.basic_pic),0);
ShowFont_WithoutBackground(font_point,lcdpoint,tmp->file.name,
x+6,y +2 +tmp->file.basic_pic.height,C_BLACK,18,area);
}
}
bool Is_Dirrent(char *all_path)
{
struct stat info;
bzero(&info, sizeof(info));
stat(all_path, &info);
return S_ISDIR(info.st_mode);
}
bool Is_Png(char *all_path)
{
return ( strstr(all_path,".png")!= NULL );
}
void Enter_Dirrent()
{
enum TOUCHTYPE{ //按键类型
NONE,
ENTER,
DEL,
CPY,
PASTE
};
enum TOUCHTYPE touch_type = NONE;
bool ret_flag = false;
bool png_show = false; //退出图片显示界面
struct png_info_data * temp_png = NULL;
chdir(cur_path); //切换到当前路径
NodeList *cur_dir_head = Init_HeadList(); //读取所有文件的链表
/***1、创建首页展示链表***/
FileNode *file_head = malloc(sizeof(FileNode)); //当前显示在首页的链表
INIT_LIST_HEAD( &(file_head->list) ); //初始化首页的链表头结点
/***2、创建选中链表,存放选中了的相对路径 ***/
NodeList *chosen_dir_head = Init_HeadList(); //为已经选中的路径创建链表
//获取
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
【资源说明】 课程设计基于Arm-Linux的可视化文件管理系统源码+项目说明.zip 项目名称: 基于Arm-Linux的可视化文件管理系统 运行平台: Gec6818 功能描述: 本项目是一个简易的文件管理器,用户可管理开发平台上所有文件项目,并可进入文件夹查看文件夹下所有文件,可以批量复制、粘贴、删除、打开 等操作。可对多文件进行批量拷贝操作,进度条实时显示拷贝进度。 核心技术点: 文件IO:实现显示屏、触摸屏、以及其他普通文件的操作 线程池:进行多文件、大文件拷贝。 内核链表:用于记录用户进入的路径、检索文件夹下内容、记录选中文件、即将拷贝的文件等操作。 MakeFile 项目管理 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
资源推荐
资源详情
资源评论
收起资源包目录
课程设计基于Arm-Linux的可视化文件管理系统源码+项目说明.zip (55个子文件)
项目说明.md 727B
syscoding_project
obj
usr
sx_list.o 3KB
copyfile.o 8KB
main.o 13KB
drawpic.o 1KB
lcd
lcd.o 5KB
draw
show_mypng.o 2KB
show_bmp.o 4KB
pthread
thread_pool.o 5KB
main 85KB
Makefile 2KB
usr
inc
list.h 750B
copyfile.h 1KB
drawpic.h 1KB
src
sx_list.c 3KB
drawpic.c 756B
copyfile.c 7KB
main.c 16KB
lcd
inc
lcd.h 905B
src
lcd.c 5KB
public
inc
pngdebug.h 5KB
png_show.h 1KB
zconf.h 16KB
pngpriv.h 88KB
inftrees.h 3KB
deflate.h 13KB
pngconf.h 22KB
png.h 140KB
pngprefix.h 0B
inflate.h 6KB
inffast.h 427B
config.h 4KB
trees.h 8KB
gzguts.h 7KB
font.h 2KB
syshead.h 1KB
kernel_list.h 7KB
pnginfo.h 12KB
pngstruct.h 20KB
zlib.h 94KB
zutil.h 7KB
pnglibconf.h 7KB
crc32.h 30KB
inffixed.h 6KB
lib
libjpeg.so.8 1.05MB
libfontfzy.a 52KB
libpng.so 428KB
libjpeg.so 1.05MB
libapi_v4l2_arm1.so 14KB
draw
inc
show_mypng.h 506B
show_bmp.h 1KB
src
show_bmp.c 5KB
show_mypng.c 2KB
pthread
inc
thread_pool.h 1KB
src
thread_pool.c 6KB
共 55 条
- 1
资源评论
Make程序设计
- 粉丝: 5623
- 资源: 3567
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功