summaryrefslogtreecommitdiffstats
path: root/knode/knarticlefactory.h
blob: 995fcdc0d92a945c7f822b0657bf15c81e47562e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
/*
    KNode, the KDE newsreader
    Copyright (c) 1999-2005 the KNode authors.
    See file AUTHORS for details

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software Foundation,
    Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, US
*/

#ifndef KNARTICLEFACTORY_H
#define KNARTICLEFACTORY_H

#include <tqvaluelist.h>
#include <kdialogbase.h>

#include "knjobdata.h"
#include "knarticle.h"
#include "knwidgets.h"

class QLabel;

class KNGroup;
class KNFolder;
class KNCollection;
class KNComposer;
class KNSendErrorDialog;
class KNNntpAccount;

namespace KNConfig {
  class Identity;
}


class KNArticleFactory : public TQObject , public KNJobConsumer {

  Q_OBJECT

  public:
    enum replyType { RTgroup, RTmail, RTboth };

    KNArticleFactory(TQObject *p=0, const char *n=0);
    ~KNArticleFactory();

    //factory methods
    void createPosting(KNNntpAccount *a);
    void createPosting(KNGroup *g);
    void createReply(KNRemoteArticle *a, TQString selectedText=TQString::null, bool post=true, bool mail=false);
    void createForward(KNArticle *a);
    void createCancel(KNArticle *a);
    void createSupersede(KNArticle *a);
    void createMail(KMime::Headers::AddressField *address);

    // send a mail via an external program...
    void sendMailExternal(const TQString &address=TQString::null, const TQString &subject=TQString::null, const TQString &body=TQString::null);

    //article handling
    void edit(KNLocalArticle *a);
    void sendArticles( KNLocalArticle::List &l, bool now = true );
    void sendOutbox();

    //composer handling
    bool closeComposeWindows();    // try to close all composers, return false if user objects
    void deleteComposerForArticle(KNLocalArticle *a);
    KNComposer* findComposer(KNLocalArticle *a);
    void configChanged();

  protected:
    //job handling
    void processJob(KNJobData *j); //reimplemented from KNJobConsumer

    //article generation
    // col: group or account
    KNLocalArticle* newArticle(KNCollection *col, TQString &sig, TQCString defChset, bool withXHeaders=true, KNArticle *origPost=0);

    //cancel & supersede
    bool cancelAllowed(KNArticle *a);

    //send-errors
    void showSendErrorDialog();

    TQValueList<KNComposer*> mCompList;
    KNSendErrorDialog *s_endErrDlg;

  protected slots:
    void slotComposerDone(KNComposer *com);
    void slotSendErrorDialogDone();

};


class KNSendErrorDialog : public KDialogBase  {

  Q_OBJECT

  public:
    KNSendErrorDialog();
    ~KNSendErrorDialog();

    void append(const TQString &subject, const TQString &error);

  protected:
    class LBoxItem : public KNListBoxItem {
      public:
        LBoxItem(const TQString &e, const TQString &t, TQPixmap *p=0)
          : KNListBoxItem(t, p) , error(e)  {}
        ~LBoxItem() {}

        TQString error;
    };

    KNDialogListBox *j_obs;
    TQLabel *e_rror;
    TQPixmap p_ixmap;

  protected slots:
    void slotHighlighted(int idx);
};

#endif //KNARTICLEFACTORY_H