All I know about a Client RC is that you need a weapon, reading folder names and what not I don't know.
PHP Code:
//#CLIENTSIDE
public function openFileBrowser() {
requesttext("folders","") ;
new GuiWindowCtrl(FileBrowser_Screen) {
profile = "GuiWindowProfile";
x = 50, y = 50;
width = 500, height = 450;
canMove = true;
canResize = true;
canClose = true;
text = "File Browser";
tile = true;
destroyonhide = true;
new GuiScrollCtrl(FileBrowser_TreeScroll) {
profile = "GuiScrollProfile";
horizSizing = "right";
vertSizing = "height";
x = 5;
y = 23;
width = 136;
height = 335;
hScrollBar = "dynamic";
vScrollBar = "dynamic";
tile = true;
new GuiTreeViewCtrl(FileBrowser_Tree) {
profile = "GuiTreeViewProfile";
horizSizing = "width";
x = y = 0;
width = 120;
fitParentWidth = false;
sortmode = "name";
thiso.catchevent(name,"onSelect","onTreeView");
}
}
new GuiTextCtrl(FileBrowser_NameLabel) {
profile = "GuiDarkTextProfile";
position = "170 24";
extent = "60 22";
minExtent = "8 22";
text = "Name";
}
new GuiTextCtrl(FileBrowser_RightsLabel) {
profile = "GuiDarkTextProfile";
position = "285 24";
extent = "40 22";
minExtent = "8 22";
text = "Rights";
}
new GuiTextCtrl(FileBrowser_SizeLabel) {
profile = "GuiDarkTextProfile";
position = "325 24";
extent = "50 22";
minExtent = "8 22";
text = "Size";
}
new GuiTextCtrl(FileBrowser_ModifiedLabel) {
profile = "GuiDarkTextProfile";
position = "375 24";
extent = "60 22";
minExtent = "8 22";
text = "Modified";
}
new GuiScrollCtrl(FileBrowser_FilesScroll) {
profile = "GuiScrollProfile";
horizSizing = "width";
vertSizing = "height";
x = 144;
y = 44;
width = 351;
height = 311;
hScrollBar = "alwaysOff";
vScrollBar = "dynamic";
tile = true;
new GuiTextListCtrl(FileBrowser_FilesList) {
profile = "GuiTextListProfile";
horizSizing = "width";
vertSizing = "height";
x = y = 0;
width = 330;
fitParentWidth = true;
sortMode = "name";
clipColumnText = true;
lineSpacing = 20;
fontSize = 18;
setIconSize(16,18);
columns = {0,120,160,230};
}
}
new GuiScrollCtrl(FileBrowser_Scroll) {
profile = "GuiScrollProfile";
x = 5;
y = 360;
width = 490;
height = 85;
horizSizing = "width";
vertSizing = "top";
hScrollBar = "alwaysOff";
vScrollBar = "dynamic";
new GuiMLTextCtrl(FileBrowser_DebugText) {
profile = "GuiMLTextProfile";
horizSizing = "width";
x = y = 0;
width = 470;
}
}
}
new GuiContextMenuCtrl(FileBrowser_Menu) {
profile = "GuiPopUpMenuProfile";
textprofile = "GuiTextListProfile";
width = 20;
// setIconSize(16,16);
clearRows();
addRow(0,"Download");
addRow(1,"Edit As Text");
addRow(2,"Upload File(s)");
addRow(-1,"-");
addRow(3,"Reload");
addRow(4,"Move");
addRow(5,"Rename");
addRow(-1,"-");
addRow(6,"Delete");
}
FileBrowser_DebugText.addText("Welcome to the filebrowser!", true);
FileBrowser_Screen.bringToFront();
}
function FileBrowser_FilesList.onResize(newwidth, newheight) {
if (newwidth<320) newwidth = 320;
FileBrowser_FilesList.columns = {0,newwidth-210,newwidth-170,newwidth-100};
widthdiff = newwidth-330;
FileBrowser_RightsLabel.x = 285+widthdiff;
FileBrowser_SizeLabel.x = 325+widthdiff;
FileBrowser_ModifiedLabel.x = 395+widthdiff;
}
function FileBrowser_FilesList.onRightMouseDown(modifier,mx,my,mcount) {
this.fileid = FileBrowser_FilesList.getRowIdAtPoint(mx,my);
if (this.fileid>=0) {
FileBrowser_FilesList.setSelectedById(this.fileid);
this.selectedfile = FileBrowser_FilesList.getSelectedText();
i = this.selectedfile.pos("\t");
if (i>=0)
this.selectedfile = this.selectedfile.substring(0,i);
FileBrowser_Menu.open(mx,my);
}
}
function FileBrowser_Menu.onSelect(entryid,text) {
switch (text) {
case "Download": {
selectFileForDownload(this.selectedfile);
break;
}
case "Edit As Text": {
break;
}
case "Upload File(s)": {
selectFileForUpload();
break;
}
case "Reload": {
triggerserver("gui","Editor","updatefile",this.selectedfile);
break;
}
case "Move": {
TextEditor.openTextInput("MoveFiles","Move Files","Enter the target folder:","Move");
if (MoveFiles_Field.text=="")
MoveFiles_Field.text = this.showfolder;
if (!MoveFiles_Field.text.ends("/"))
MoveFiles_Field.text @= "/";
break;
}
case "Rename": {
TextEditor.openTextInput("RenameFile","Rename File","Enter the new filename:","Rename");
RenameFile_Field.text = this.selectedfile;
break;
}
case "Delete": {
requestFileDeletion(this.selectedfile);
requesttext("folder",this.showfolder);
break;
}
}
}
function MoveFiles_Button.onAction() {
targetfolder = MoveFiles_Field.text;
if (!targetfolder.ends("/"))
targetfolder @= "/";
echo("moving files to : " @ targetfolder);
requestFilesMove(targetfolder,this.selectedfile);
requesttext("folder",this.showfolder);
MoveFiles_Window.hide();
}
function RenameFile_Button.onAction() {
newfilename = RenameFile_Field.text;
echo("renaming file to: " @ newfilename);
requestFileRename(this.selectedfile,newfilename);
requesttext("folder",this.showfolder);
RenameFile_Window.hide();
}
function onFolderLog(text) {
echo("folderlog: " @ text);
FileBrowser_DebugText.addText("\n" @ text, true);
FileBrowser_DebugText.scrollToBottom();
}
function onReceiveText(texttype,textoption,textlines) {
switch (texttype) {
case "folders":
FileBrowser_Tree.clearNodes();
for (foldername: textlines) {
subnode = FileBrowser_Tree.addNodeByPath(foldername,"/");
subnode.sortgroup = 1;
subnode.expanded = false;
}
FileBrowser_Tree.sort();
break;
case "folder":
FileBrowser_FilesList.clearRows();
this.displayedfiles = textlines;
for (i=0; i<textlines.size(); i++) {
fileentry = textlines[i];
// Add the file entry
str = fileentry[0] @ '\t' @ fileentry[1] @ '\t' @ fileentry[2] @ '\t' @ fileentry[3];
FileBrowser_FilesList.addRow(i,str);
// Set icon
dotpos = fileentry[0].positions(".");
imgfilename = dotpos.size() > 0 ? "fileicon_" @ fileentry[0].substring(dotpos[dotpos.size()-1] + 1, -1) @ ".png" : "";
lastRow().icon.drawimagerectangle(0,0,imgfilename,0,0,16,16);
}
FileBrowser_FilesList.sort();
break;
}
}
function onTreeView(obj,node,path,dot) {
this.showfolder = path;
requesttext("folder",path);
}
function lastRow() return FileBrowser_FilesList.rows[FileBrowser_FilesList.rows.size()-1];