void GDocApp<OptionsFmt>::OnReceiveFiles(GArray<char*> &Files) { char *f = Files.Length() ? Files[0] : 0; if (f && _OpenFile(f, false)) { GMru::AddFile(f); } }
int GWindow::OnDrop(char *Format, GVariant *Data, GdcPt2 Pt, int KeyState) { int Status = DROPEFFECT_NONE; if (Format && Data) { if (stricmp(Format, LGI_FileDropFormat) == 0) { GArray<char*> Files; if (Data->IsBinary()) { GToken Uri( (char*)Data->Value.Binary.Data, "\r\n,", true, Data->Value.Binary.Length); for (int n=0; n<Uri.Length(); n++) { char *File = Uri[n]; if (strnicmp(File, "file:", 5) == 0) File += 5; char *i = File, *o = File; while (*i) { if (i[0] == '%' && i[1] && i[2]) { char h[3] = { i[1], i[2], 0 }; *o++ = htoi(h); i += 3; } else { *o++ = *i++; } } *o++ = 0; if (FileExists(File)) { Files.Add(NewStr(File)); } } } if (Files.Length()) { Status = DROPEFFECT_COPY; OnReceiveFiles(Files); Files.DeleteArrays(); } } } return Status; }
int GetHookIndex(GView *Target, bool Create = false) { for (int i=0; i<Hooks.Length(); i++) { if (Hooks[i].Target == Target) return i; } if (Create) { HookInfo *n = &Hooks[Hooks.Length()]; if (n) { n->Target = Target; n->Flags = 0; return Hooks.Length() - 1; } } return -1; }
int GDragDropTarget::OnDrop(GArray<GDragData> &DropData, GdcPt2 Pt, int KeyState) { if (DropData.Length() == 0 || DropData[0].Data.Length() == 0) return DROPEFFECT_NONE; char *Fmt = DropData[0].Format; GVariant *Var = &DropData[0].Data[0]; return OnDrop(Fmt, Var, Pt, KeyState); }
bool GDragDropSource::GetData(GArray<GDragData> &DragData) { if (DragData.Length() == 0) return false; // Call the deprecated version of 'GetData' GVariant *v = &DragData[0].Data[0]; char *fmt = DragData[0].Format; if (!v || !fmt) return false; return GetData(v, fmt); }
GMessage::Result GWindow::OnEvent(GMessage *Msg) { switch (MsgCode(Msg)) { case B_SIMPLE_DATA: { GArray<char*> Files; int32 Count = 0; type_code Type = 0; if (Msg->GetInfo("refs", &Type, &Count) == B_OK) { for (int i=0; i<Count; i++) { entry_ref Ref; if (Msg->FindRef("refs", i, &Ref) == B_OK) { BPath Path(""); BEntry Entry(&Ref, true); Entry.GetPath(&Path); char *p = (char*) Path.Path(); if (p) { Files.Add(NewStr(p)); } } } } if (Files.Length() > 0) { OnReceiveFiles(Files); } Files.DeleteArrays(); break; } case M_COMMAND: { int32 Cmd = 0; int32 Event = 0; Msg->FindInt32("Cmd", &Cmd); Msg->FindInt32("Event", &Event); OnCommand(Cmd, Event, 0); break; } } return GView::OnEvent(Msg); }