1 #include "config.h"
2 #include "i18n.h"
3 
4 #include <fx.h>
5 #include <fxdefs.h>
6 #include <FXPNGIcon.h>
7 
8 #include "icons.h"
9 #include "xfedefs.h"
10 #include "xfeutils.h"
11 #include "OverwriteBox.h"
12 
13 // Padding for message box buttons
14 #define HORZ_PAD    30
15 #define VERT_PAD    2
16 
17 
18 // Map
19 FXDEFMAP(OverwriteBox) OverwriteBoxMap[] =
20 {
21     FXMAPFUNCS(SEL_COMMAND, OverwriteBox::ID_CLICKED_CANCEL, OverwriteBox::ID_CLICKED_SKIP_ALL, OverwriteBox::onCmdClicked),
22 };
23 
24 
25 
26 // Object implementation
FXIMPLEMENT(OverwriteBox,DialogBox,OverwriteBoxMap,ARRAYNUMBER (OverwriteBoxMap))27 FXIMPLEMENT(OverwriteBox, DialogBox, OverwriteBoxMap, ARRAYNUMBER(OverwriteBoxMap))
28 
29 
30 // Create message box with text
31 OverwriteBox::OverwriteBox(FXWindow* win, const FXString& name, const FXString& text, FXuint type, FXuint opts, int x, int y) :
32     DialogBox(win, name, opts|DECOR_TITLE|DECOR_BORDER|DECOR_RESIZE|DECOR_CLOSE, x, y, 0, 0)
33 {
34     FXVerticalFrame*   content = new FXVerticalFrame(this, LAYOUT_FILL_X|LAYOUT_FILL_Y);
35     FXHorizontalFrame* info = new FXHorizontalFrame(content, LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_FILL_X|LAYOUT_FILL_Y, 0, 0, 0, 0, 10, 10, 10, 10);
36 
37     new FXLabel(info, FXString::null, questionbigicon, ICON_BEFORE_TEXT|LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_FILL_X|LAYOUT_FILL_Y);
38 
39     // Set message text with a maximum of MAX_MESSAGE_LENGTH characters per line
40     FXString str = ::multiLines(text, MAX_MESSAGE_LENGTH);
41     new FXLabel(info, str, NULL, JUSTIFY_LEFT|ICON_BEFORE_TEXT|LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_FILL_X|LAYOUT_FILL_Y);
42 
43     FXHorizontalFrame* buttons = new FXHorizontalFrame(content, LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_FILL_X|PACK_UNIFORM_WIDTH, 0, 0, 0, 0, 10, 10, 10, 10);
44 
45 	// Dialog with five options for multiple files
46 	if (type == OVWBOX_MULTIPLE_FILES)
47 	{
48 		new FXButton(buttons, _("&Cancel"), NULL, this, ID_CLICKED_CANCEL, BUTTON_INITIAL|BUTTON_DEFAULT|FRAME_RAISED|FRAME_THICK|LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_CENTER_X, 0, 0, 0, 0, HORZ_PAD, HORZ_PAD, VERT_PAD, VERT_PAD);
49 		new FXButton(buttons, _("&Skip"), NULL, this, ID_CLICKED_SKIP, BUTTON_DEFAULT|FRAME_RAISED|FRAME_THICK|LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_CENTER_X, 0, 0, 0, 0, HORZ_PAD, HORZ_PAD, VERT_PAD, VERT_PAD);
50 		new FXButton(buttons, _("Skip A&ll"), NULL, this, ID_CLICKED_SKIP_ALL, BUTTON_DEFAULT|FRAME_RAISED|FRAME_THICK|LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_CENTER_X, 0, 0, 0, 0, HORZ_PAD, HORZ_PAD, VERT_PAD, VERT_PAD);
51 		new FXButton(buttons, _("&Yes"), NULL, this, ID_CLICKED_OVERWRITE, BUTTON_DEFAULT|FRAME_RAISED|FRAME_THICK|LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_CENTER_X, 0, 0, 0, 0, HORZ_PAD, HORZ_PAD, VERT_PAD, VERT_PAD);
52 		new FXButton(buttons, _("Yes for &All"), NULL, this, ID_CLICKED_OVERWRITE_ALL, BUTTON_DEFAULT|FRAME_RAISED|FRAME_THICK|LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_CENTER_X, 0, 0, 0, 0, HORZ_PAD, HORZ_PAD, VERT_PAD, VERT_PAD);
53 	}
54 
55 	// Dialog with two options for single file
56 	else
57 	{
58 		new FXButton(buttons, _("&Cancel"), NULL, this, ID_CLICKED_CANCEL, BUTTON_INITIAL|BUTTON_DEFAULT|FRAME_RAISED|FRAME_THICK|LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_CENTER_X, 0, 0, 0, 0, HORZ_PAD, HORZ_PAD, VERT_PAD, VERT_PAD);
59 		new FXButton(buttons, _("&Yes"), NULL, this, ID_CLICKED_OVERWRITE, BUTTON_DEFAULT|FRAME_RAISED|FRAME_THICK|LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_CENTER_X, 0, 0, 0, 0, HORZ_PAD, HORZ_PAD, VERT_PAD, VERT_PAD);
60 	}
61 }
62 
63 
64 // Create message box with text, source and target size, source and target modified time
OverwriteBox(FXWindow * win,const FXString & name,const FXString & text,FXString & srcsize,FXString & srcmtime,FXString & tgtsize,FXString & tgtmtime,FXuint type,FXuint opts,int x,int y)65 OverwriteBox::OverwriteBox(FXWindow* win, const FXString& name, const FXString& text, FXString& srcsize, FXString& srcmtime, FXString& tgtsize, FXString& tgtmtime, FXuint type, FXuint opts, int x, int y) :
66     DialogBox(win, name, opts|DECOR_TITLE|DECOR_BORDER|DECOR_RESIZE|DECOR_CLOSE, x, y, 0, 0)
67 {
68     FXVerticalFrame* content = new FXVerticalFrame(this, LAYOUT_FILL_X|LAYOUT_FILL_Y);
69     FXVerticalFrame* vframe = new FXVerticalFrame(content, LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_FILL_X|LAYOUT_FILL_Y, 0, 0, 0, 0, 0, 0, 0, 0);
70 
71     FXHorizontalFrame* info = new FXHorizontalFrame(vframe, LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_FILL_X|LAYOUT_FILL_Y, 0, 0, 0, 0, 0, 0, 0, 0);
72 
73     new FXLabel(info, FXString::null, questionbigicon, ICON_BEFORE_TEXT|LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_FILL_X|LAYOUT_FILL_Y);
74 
75     // Set message text with a maximum of MAX_MESSAGE_LENGTH characters per line
76     FXString str = ::multiLines(text, MAX_MESSAGE_LENGTH);
77     new FXLabel(info, str, NULL, JUSTIFY_LEFT|ICON_BEFORE_TEXT|LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_FILL_X|LAYOUT_FILL_Y);
78 
79     FXMatrix* matrix = new FXMatrix(vframe, 5, MATRIX_BY_COLUMNS|LAYOUT_SIDE_TOP|LAYOUT_FILL_X|LAYOUT_FILL_Y);
80 
81     new FXVerticalSeparator(matrix, SEPARATOR_NONE|LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_FILL_X|LAYOUT_CENTER_Y, 0, 0, 0, 0, 0, 40);
82     new FXLabel(matrix, _("Source size:"), NULL, JUSTIFY_LEFT|ICON_BEFORE_TEXT|LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_FILL_X|LAYOUT_FILL_Y);
83     new FXLabel(matrix, srcsize, NULL, JUSTIFY_LEFT|ICON_BEFORE_TEXT|LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_FILL_X|LAYOUT_FILL_Y);
84     new FXLabel(matrix, _("- Modified date:"), NULL, JUSTIFY_LEFT|ICON_BEFORE_TEXT|LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_FILL_X|LAYOUT_FILL_Y);
85     new FXLabel(matrix, srcmtime, NULL, JUSTIFY_LEFT|ICON_BEFORE_TEXT|LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_FILL_X|LAYOUT_FILL_Y);
86 
87     new FXVerticalSeparator(matrix, SEPARATOR_NONE|LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_FILL_X|LAYOUT_CENTER_Y, 0, 0, 0, 0, 0, 40);
88     new FXLabel(matrix, _("Target size:"), NULL, JUSTIFY_LEFT|ICON_BEFORE_TEXT|LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_FILL_X|LAYOUT_FILL_Y);
89     new FXLabel(matrix, tgtsize, NULL, JUSTIFY_LEFT|ICON_BEFORE_TEXT|LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_FILL_X|LAYOUT_FILL_Y);
90     new FXLabel(matrix, _("- Modified date:"), NULL, JUSTIFY_LEFT|ICON_BEFORE_TEXT|LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_FILL_X|LAYOUT_FILL_Y);
91     new FXLabel(matrix, tgtmtime, NULL, JUSTIFY_LEFT|ICON_BEFORE_TEXT|LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_FILL_X|LAYOUT_FILL_Y);
92 
93     FXHorizontalFrame* buttons = new FXHorizontalFrame(content, LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_FILL_X|PACK_UNIFORM_WIDTH, 0, 0, 0, 0, 10, 10, 10, 10);
94 
95 	// Dialog with five options for multiple files
96 	if (type == OVWBOX_MULTIPLE_FILES)
97 	{
98 		new FXButton(buttons, _("&Cancel"), NULL, this, ID_CLICKED_CANCEL, BUTTON_INITIAL|BUTTON_DEFAULT|FRAME_RAISED|FRAME_THICK|LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_CENTER_X, 0, 0, 0, 0, HORZ_PAD, HORZ_PAD, VERT_PAD, VERT_PAD);
99 		new FXButton(buttons, _("&Skip"), NULL, this, ID_CLICKED_SKIP, BUTTON_DEFAULT|FRAME_RAISED|FRAME_THICK|LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_CENTER_X, 0, 0, 0, 0, HORZ_PAD, HORZ_PAD, VERT_PAD, VERT_PAD);
100 		new FXButton(buttons, _("Skip A&ll"), NULL, this, ID_CLICKED_SKIP_ALL, BUTTON_DEFAULT|FRAME_RAISED|FRAME_THICK|LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_CENTER_X, 0, 0, 0, 0, HORZ_PAD, HORZ_PAD, VERT_PAD, VERT_PAD);
101 		new FXButton(buttons, _("&Yes"), NULL, this, ID_CLICKED_OVERWRITE, BUTTON_DEFAULT|FRAME_RAISED|FRAME_THICK|LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_CENTER_X, 0, 0, 0, 0, HORZ_PAD, HORZ_PAD, VERT_PAD, VERT_PAD);
102 		new FXButton(buttons, _("Yes for &All"), NULL, this, ID_CLICKED_OVERWRITE_ALL, BUTTON_DEFAULT|FRAME_RAISED|FRAME_THICK|LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_CENTER_X, 0, 0, 0, 0, HORZ_PAD, HORZ_PAD, VERT_PAD, VERT_PAD);
103 	}
104 
105 	// Dialog with two options for single file
106 	else
107 	{
108 		new FXButton(buttons, _("&Cancel"), NULL, this, ID_CLICKED_CANCEL, BUTTON_INITIAL|BUTTON_DEFAULT|FRAME_RAISED|FRAME_THICK|LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_CENTER_X, 0, 0, 0, 0, HORZ_PAD, HORZ_PAD, VERT_PAD, VERT_PAD);
109 		new FXButton(buttons, _("&Yes"), NULL, this, ID_CLICKED_OVERWRITE, BUTTON_DEFAULT|FRAME_RAISED|FRAME_THICK|LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_CENTER_X, 0, 0, 0, 0, HORZ_PAD, HORZ_PAD, VERT_PAD, VERT_PAD);
110 	}
111 }
112 
113 
114 
115 // Close dialog
onCmdClicked(FXObject *,FXSelector sel,void *)116 long OverwriteBox::onCmdClicked(FXObject*, FXSelector sel, void*)
117 {
118     getApp()->stopModal(this, OVWBOX_CLICKED_CANCEL+(FXSELID(sel)-ID_CLICKED_CANCEL));
119     hide();
120     return(1);
121 }
122