/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- * * The contents of this file are subject to the Netscape Public License * Version 1.0 (the "NPL"); you may not use this file except in * compliance with the NPL. You may obtain a copy of the NPL at * http://www.mozilla.org/NPL/ * * Software distributed under the NPL is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL * for the specific language governing rights and limitations under the * NPL. * * The Initial Developer of this code under the NPL is Netscape * Communications Corporation. Portions created by Netscape are * Copyright (C) 1998 Netscape Communications Corporation. All Rights * Reserved. */ /* FolderPromptDialog.cpp -- "New Folder" dialog Created: Akkana Peck , 11-Dec-97. */ #include "FolderPromptDialog.h" #include "felocale.h" #include #include #include #include "FolderDropdown.h" // we need this in the post() method. extern "C" void fe_EventLoop(); XFE_FolderPromptDialog::XFE_FolderPromptDialog(Widget parent, char *name, XFE_Frame *frame, XFE_Component* toplevel) : XFE_Dialog(parent, name, TRUE, // ok TRUE, // cancel FALSE, // help FALSE, // apply TRUE, // separator TRUE // modal ) { m_frame = frame; m_toplevel = toplevel; Widget form = XtCreateManagedWidget("form", xmFormWidgetClass, m_chrome, NULL, 0); m_text = XtVaCreateManagedWidget("folderText", xmTextFieldWidgetClass, form, XmNtopAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, 0); XtVaCreateManagedWidget("name", xmLabelGadgetClass, form, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_WIDGET, XmNrightWidget, m_text, XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET, XmNbottomWidget, m_text, 0); Widget w = XtVaCreateManagedWidget("subFolderOf", xmLabelGadgetClass, form, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, m_text, XmNleftAttachment, XmATTACH_FORM, 0); m_folderDropDown = new XFE_FolderDropdown(getToplevel(), form, TRUE, /* allowServerSelection */ FALSE /* showNewsgroups */); XtVaSetValues(m_folderDropDown->getBaseWidget(), XmNleftAttachment, XmATTACH_FORM, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, w, XmNrightAttachment, XmATTACH_FORM, 0); m_folderDropDown->setPopupServer(False); m_folderDropDown->show(); XtAddCallback(m_chrome, XmNokCallback, ok_cb, this); XtAddCallback(m_chrome, XmNcancelCallback, cancel_cb, this); } XFE_FolderPromptDialog::~XFE_FolderPromptDialog() { //delete m_folderDropDown; } MSG_FolderInfo* XFE_FolderPromptDialog::prompt(MSG_FolderInfo* finfo) { m_folderDropDown->selectFolder(finfo); m_doneWithLoop = False; XtVaSetValues(m_chrome, XmNdeleteResponse, XmUNMAP, NULL); show(); while(!m_doneWithLoop) fe_EventLoop(); return m_retVal; } void XFE_FolderPromptDialog::ok() { m_doneWithLoop = True; char* name = fe_GetTextField(m_text); m_retVal = 0; // // Supposedly, MSG_CreateMailFolder() is obsoleted by // MSG_CreateMailFolderWithPane(); but we don't necessarily have // a pane here, e.g. we might have been called from the prefs win. // MSG_Master* master = FE_GetMaster(); if (MSG_CreateMailFolder(master, m_folderDropDown->getSelectedFolder(), name) == 0) { #if 0 // NOTE! This is fraught with problems! MSG_CreateMailFolder() // doesn't return a pointer to the folder it just created; so we // search by name, but there's no guarantee that the folder found // by the folder dropdown is the same folder that we just created, // only that it has the same name. :-( m_folderDropDown->selectFolder(name); m_retVal = m_folderDropDown->getSelectedFolder(); #endif int32 numchildren = MSG_GetFolderChildren(master, m_folderDropDown->getSelectedFolder(), NULL, 0); if (numchildren > 0) { MSG_FolderInfo** result = new MSG_FolderInfo* [ numchildren ]; MSG_GetFolderChildren(master, m_folderDropDown->getSelectedFolder(), result, sizeof result / sizeof *result); for (int i=0; iok(); } void XFE_FolderPromptDialog::cancel_cb(Widget, XtPointer clientData, XtPointer) { XFE_FolderPromptDialog *obj = (XFE_FolderPromptDialog*)clientData; obj->cancel(); }