1 /**
2 *  Copyright Mikael H�gdahl - triyana@users.sourceforge.net
3 *
4 *  This source is distributed under the terms of the Q Public License version 1.0,
5 *  created by Trolltech (www.trolltech.com).
6 */
7 
8 #include <Resource.h>
9 #include <db/DBFactory.h>
10 #include <dlg/ExportDlg.h>
11 #include <dlg/InfoDlg.h>
12 #include <dlg/ProgressDlg.h>
13 #include <gui/XTrader.h>
14 #include <help/Export.h>
15 #include <MHDate.h>
16 #include <MHDebug.h>
17 #include <FL/fl_draw.H>
18 #include <FL/fl_ask.H>
19 #include <FL/Fl_File_Chooser.H>
20 
21 
22 
23 /**
24 *  Create export dialog.
25 */
ExportDlg()26 ExportDlg::ExportDlg () :
27 Fl_Dialog (370, 265, "EXPORT DATABASE TO FILE") {
28     Fl_Window* o = this;
29 
30     o->box(FL_UP_BOX);
31     { Fl_Input* o = aFile = new Fl_Input(10, 25, 245, 25, "EXPORT TO FILE");
32       o->labelfont(1);
33       o->align(FL_ALIGN_TOP_LEFT);
34     }
35     { Fl_Box* o = aSelectLabel = new Fl_Box(10, 75, 245, 180, "SELECT DATA");
36       o->box(FL_ENGRAVED_FRAME);
37       o->labelfont(1);
38       o->align(FL_ALIGN_TOP_LEFT);
39     }
40     { Fl_Check_Button* o = aSecurity = new Fl_Check_Button(15, 80, 145, 25, "SECURITIES");
41       o->down_box(FL_DOWN_BOX);
42     }
43     { Fl_Check_Button* o = aSecurityList = new Fl_Check_Button(15, 105, 145, 25, "SECURITY LISTS");
44       o->down_box(FL_DOWN_BOX);
45     }
46     { Fl_Check_Button* o = aPrice = new Fl_Check_Button(15, 130, 145, 25, "PRICE DATA");
47       o->down_box(FL_DOWN_BOX);
48     }
49     { Fl_Check_Button* o = aAccount = new Fl_Check_Button(15, 155, 145, 25, "ACCOUNTS");
50       o->down_box(FL_DOWN_BOX);
51     }
52     { Fl_Check_Button* o = aTransaction = new Fl_Check_Button(15, 180, 145, 25, "TRANSACTIONS");
53       o->down_box(FL_DOWN_BOX);
54     }
55     { Fl_Check_Button* o = aGuard = new Fl_Check_Button(15, 205, 145, 25, "GUARD");
56       o->down_box(FL_DOWN_BOX);
57     }
58     { Fl_Check_Button* o = aSettings = new Fl_Check_Button(15, 230, 145, 25, "SETTINGS");
59       o->down_box(FL_DOWN_BOX);
60     }
61     aExport = new Fl_Return_Button(265, 25, 100, 25, "&EXPORT");
62     aBrowse = new Fl_Button(265, 60, 100, 25, "&BROWSE...");
63     aHelp = new Fl_Button(265, 95, 100, 25, "&HELP");
64     aClose = new Fl_Button(265, 130, 100, 25, "&CLOSE");
65     o->end();
66 
67     aExport->callback (Fl_Dialog::cb2_, this);
68     aBrowse->callback (Fl_Dialog::cb3_, this);
69     aHelp->callback (Fl_Dialog::cb4_, this);
70     aClose->callback (Fl_Dialog::cb1_, this);
71 
72     label (STRING(DLG_EXPORT));
73     aFile->label (STRING(RESULT_FILE));
74     aSelectLabel->label (STRING(SELECT_TABLES));
75     aSecurity->label (STRING(SECURITY));
76     aSecurityList->label (STRING(SECURITY_LIST));
77     aPrice->label (STRING(PRICE));
78     aAccount->label (STRING(ACCOUNT));
79     aTransaction->label (STRING(TRANSACTIONS));
80     aGuard->label (STRING(PRICE_GUARD));
81     aSettings->label (STRING(CURRENT_WORKSPACE));
82 
83     aExport->label (STRING(EXPORT));
84     aBrowse->label (STRING(BROWSE));
85     aHelp->label (STRING(HELP));
86     aClose->label (STRING(CLOSE_));
87 
88     aSecurity->labelsize (XTrader::FontSize());
89     aSecurityList->labelsize (XTrader::FontSize());
90     aPrice->labelsize (XTrader::FontSize());
91     aAccount->labelsize (XTrader::FontSize());
92     aTransaction->labelsize (XTrader::FontSize());
93     aGuard->labelsize (XTrader::FontSize());
94     aSettings->labelsize (XTrader::FontSize());
95 
96     XTrader::FixButton (aExport);
97     XTrader::FixButton (aBrowse);
98     XTrader::FixButton (aHelp);
99     XTrader::FixButton (aClose);
100 }
101 
102 
103 
104 /**
105 *  Export database to file
106 */
cb1()107 void ExportDlg::cb1 () {
108     aRetVal = 0;
109 }
110 
111 
112 
113 /**
114 *  Export database to file
115 */
cb2()116 void ExportDlg::cb2 () {
117     DBG ("cbExport")
118 
119     if (aFile->value () == 0 || *aFile->value () == '\0')
120         fl_alert (STRING(ERROR_MISSING_FILE));
121     else {
122         XTrader::StartWork (STRING(INFO_EXPORT));
123 
124         try {
125             DBFactory::Export (aFile->value(), aAccount->value() == '\1', aTransaction->value() == '\1', aSecurityList->value() == '\1', aSecurity->value() == '\1', aPrice->value() == '\1', aGuard->value() == '\1', aSettings->value() == '\1');
126             fl_beep (FL_BEEP_MESSAGE);
127         }
128         catch (const char* e) {
129             fl_beep (FL_BEEP_ERROR);
130             label (e);
131         }
132         XTrader::StopWork ("");
133     }
134 }
135 
136 
137 /**
138  * Callback for file chooser
139  */
exp_fc_callback(Fl_File_Chooser * fc,void * data)140 void exp_fc_callback(Fl_File_Chooser *fc, void *data)
141 {
142 	ExportDlg *e = static_cast<ExportDlg *>(data);
143 	const char *file = fc->value();
144 	if (file && *file) e->aFile->value(file);
145 }
146 
147 /**
148 *  Get filename
149 */
cb3()150 void ExportDlg::cb3 () {
151     Fl_File_Chooser *fc = new Fl_File_Chooser(STRING(DLG_SELECT_WRITE_FILE), "*.*", Fl_File_Chooser::SINGLE, "");
152     fc->callback(exp_fc_callback, this);
153     delete fc;
154 }
155 
156 
157 
158 /**
159 *  Show help
160 */
cb4()161 void ExportDlg::cb4 () {
162     InfoDlg dlg (STRING(HELP_EXPORT), aaExport);
163     dlg.show_modal (this);
164 }
165