* Applied patch by Karvjorm that localizes Sudoku - thanks!
* I removed translating the debug output, though. Style fixes come in the next commit with the hope for improvement in future patches. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@40874 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
+15
-1
@@ -12,6 +12,20 @@ Application Sudoku :
|
|||||||
SudokuView.cpp
|
SudokuView.cpp
|
||||||
SudokuWindow.cpp
|
SudokuWindow.cpp
|
||||||
|
|
||||||
: be tracker $(TARGET_LIBSTDC++)
|
: be tracker $(HAIKU_LOCALE_LIBS) $(TARGET_LIBSTDC++)
|
||||||
: Sudoku.rdef
|
: Sudoku.rdef
|
||||||
;
|
;
|
||||||
|
|
||||||
|
DoCatalogs Sudoku :
|
||||||
|
x-vnd.Haiku-Sudoku
|
||||||
|
:
|
||||||
|
ProgressWindow.cpp
|
||||||
|
Sudoku.cpp
|
||||||
|
SudokuGenerator.cpp
|
||||||
|
SudokuWindow.cpp
|
||||||
|
;
|
||||||
|
|
||||||
|
AddCatalogEntryAttribute Sudoku
|
||||||
|
:
|
||||||
|
x-vnd.Haiku-Sudoku:SudokuWindow:Sudoku
|
||||||
|
;
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
|
|
||||||
#include <Autolock.h>
|
#include <Autolock.h>
|
||||||
#include <Button.h>
|
#include <Button.h>
|
||||||
|
#include <Catalog.h>
|
||||||
#include <MessageRunner.h>
|
#include <MessageRunner.h>
|
||||||
#include <Screen.h>
|
#include <Screen.h>
|
||||||
#include <StatusBar.h>
|
#include <StatusBar.h>
|
||||||
@@ -15,12 +16,15 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
|
|
||||||
|
#undef B_TRANSLATE_CONTEXT
|
||||||
|
#define B_TRANSLATE_CONTEXT "ProgressWindow"
|
||||||
|
|
||||||
static const uint32 kMsgShow = 'show';
|
static const uint32 kMsgShow = 'show';
|
||||||
|
|
||||||
|
|
||||||
ProgressWindow::ProgressWindow(BWindow* referenceWindow,
|
ProgressWindow::ProgressWindow(BWindow* referenceWindow,
|
||||||
BMessage* abortMessage)
|
BMessage* abortMessage)
|
||||||
: BWindow(BRect(0, 0, 250, 100), "Progress monitor",
|
: BWindow(BRect(0, 0, 250, 100), B_TRANSLATE("Progress monitor"),
|
||||||
B_MODAL_WINDOW_LOOK, B_FLOATING_APP_WINDOW_FEEL,
|
B_MODAL_WINDOW_LOOK, B_FLOATING_APP_WINDOW_FEEL,
|
||||||
B_NOT_ZOOMABLE | B_NOT_RESIZABLE | B_ASYNCHRONOUS_CONTROLS),
|
B_NOT_ZOOMABLE | B_NOT_RESIZABLE | B_ASYNCHRONOUS_CONTROLS),
|
||||||
fRunner(NULL)
|
fRunner(NULL)
|
||||||
@@ -41,7 +45,7 @@ ProgressWindow::ProgressWindow(BWindow* referenceWindow,
|
|||||||
|
|
||||||
if (abortMessage != NULL && referenceWindow) {
|
if (abortMessage != NULL && referenceWindow) {
|
||||||
rect.top += height + 8;
|
rect.top += height + 8;
|
||||||
BButton* button = new BButton(rect, "abort", "Abort",
|
BButton* button = new BButton(rect, "abort", B_TRANSLATE("Abort"),
|
||||||
abortMessage);
|
abortMessage);
|
||||||
button->ResizeToPreferred();
|
button->ResizeToPreferred();
|
||||||
button->MoveBy((rect.Width() - button->Bounds().Width()) / 2, 0);
|
button->MoveBy((rect.Width() - button->Bounds().Width()) / 2, 0);
|
||||||
|
|||||||
@@ -12,8 +12,11 @@
|
|||||||
|
|
||||||
#include <Alert.h>
|
#include <Alert.h>
|
||||||
#include <Application.h>
|
#include <Application.h>
|
||||||
|
#include <Catalog.h>
|
||||||
#include <TextView.h>
|
#include <TextView.h>
|
||||||
|
|
||||||
|
#undef B_TRANSLATE_CONTEXT
|
||||||
|
#define B_TRANSLATE_CONTEXT "Sudoku"
|
||||||
|
|
||||||
const char* kSignature = "application/x-vnd.Haiku-Sudoku";
|
const char* kSignature = "application/x-vnd.Haiku-Sudoku";
|
||||||
|
|
||||||
@@ -61,9 +64,9 @@ Sudoku::AboutRequested()
|
|||||||
void
|
void
|
||||||
Sudoku::DisplayAbout()
|
Sudoku::DisplayAbout()
|
||||||
{
|
{
|
||||||
BAlert *alert = new BAlert("about", "Sudoku\n"
|
BAlert *alert = new BAlert(B_TRANSLATE("About"), B_TRANSLATE("Sudoku\n"
|
||||||
"\twritten by Axel Dörfler\n"
|
"\twritten by Axel Dörfler\n"
|
||||||
"\tCopyright 2007, Haiku Inc.\n", "OK");
|
"\tCopyright 2007, Haiku Inc.\n"), B_TRANSLATE("OK"));
|
||||||
BTextView *view = alert->TextView();
|
BTextView *view = alert->TextView();
|
||||||
BFont font;
|
BFont font;
|
||||||
|
|
||||||
@@ -72,8 +75,9 @@ Sudoku::DisplayAbout()
|
|||||||
view->GetFont(&font);
|
view->GetFont(&font);
|
||||||
font.SetSize(18);
|
font.SetSize(18);
|
||||||
font.SetFace(B_BOLD_FACE);
|
font.SetFace(B_BOLD_FACE);
|
||||||
view->SetFontAndColor(0, 6, &font);
|
view->SetFontAndColor(0, strlen(B_TRANSLATE("Sudoku")), &font);
|
||||||
|
|
||||||
|
alert->SetShortcut(0, B_ESCAPE);
|
||||||
alert->Go();
|
alert->Go();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -10,10 +10,15 @@
|
|||||||
#include "SudokuField.h"
|
#include "SudokuField.h"
|
||||||
#include "SudokuSolver.h"
|
#include "SudokuSolver.h"
|
||||||
|
|
||||||
|
#include <Catalog.h>
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
#undef B_TRANSLATE_CONTEXT
|
||||||
|
#define B_TRANSLATE_CONTEXT "SudokuGenerator"
|
||||||
|
|
||||||
SudokuGenerator::SudokuGenerator()
|
SudokuGenerator::SudokuGenerator()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@@ -54,7 +59,7 @@ SudokuGenerator::Generate(SudokuField* target, uint32 fieldsLeft,
|
|||||||
|
|
||||||
SudokuField field(target->BlockSize());
|
SudokuField field(target->BlockSize());
|
||||||
uint32 inputCount = field.Size() * field.Size() / 3;
|
uint32 inputCount = field.Size() * field.Size() / 3;
|
||||||
_Progress(progress, "Creating solvable field", 5.f);
|
_Progress(progress, B_TRANSLATE("Creating solvable field"), 5.f);
|
||||||
|
|
||||||
while (!*quit) {
|
while (!*quit) {
|
||||||
field.Reset();
|
field.Reset();
|
||||||
@@ -107,7 +112,7 @@ SudokuGenerator::Generate(SudokuField* target, uint32 fieldsLeft,
|
|||||||
bool tried[field.Size() * field.Size()];
|
bool tried[field.Size() * field.Size()];
|
||||||
int32 tries = field.Size() * field.Size() * 3 / 4;
|
int32 tries = field.Size() * field.Size() * 3 / 4;
|
||||||
memset(tried, 0, sizeof(tried));
|
memset(tried, 0, sizeof(tried));
|
||||||
_Progress(progress, "Searching for removable values", 30.f);
|
_Progress(progress, B_TRANSLATE("Searching for removable values"), 30.f);
|
||||||
|
|
||||||
while (!*quit && removeCount > 0 && tries-- > 0) {
|
while (!*quit && removeCount > 0 && tries-- > 0) {
|
||||||
SudokuField copy(field);
|
SudokuField copy(field);
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
|
|
||||||
#include <Alert.h>
|
#include <Alert.h>
|
||||||
#include <Application.h>
|
#include <Application.h>
|
||||||
|
#include <Catalog.h>
|
||||||
#include <File.h>
|
#include <File.h>
|
||||||
#include <FilePanel.h>
|
#include <FilePanel.h>
|
||||||
#include <FindDirectory.h>
|
#include <FindDirectory.h>
|
||||||
@@ -29,6 +30,9 @@
|
|||||||
#include "SudokuView.h"
|
#include "SudokuView.h"
|
||||||
|
|
||||||
|
|
||||||
|
#undef B_TRANSLATE_CONTEXT
|
||||||
|
#define B_TRANSLATE_CONTEXT "SudokuWindow"
|
||||||
|
|
||||||
const uint32 kMsgOpenFilePanel = 'opfp';
|
const uint32 kMsgOpenFilePanel = 'opfp';
|
||||||
const uint32 kMsgGenerateSudoku = 'gnsu';
|
const uint32 kMsgGenerateSudoku = 'gnsu';
|
||||||
const uint32 kMsgAbortSudokuGenerator = 'asgn';
|
const uint32 kMsgAbortSudokuGenerator = 'asgn';
|
||||||
@@ -111,7 +115,9 @@ GenerateSudoku::_Generate()
|
|||||||
|
|
||||||
bigtime_t start = system_time();
|
bigtime_t start = system_time();
|
||||||
generator.Generate(&fField, 40 - fLevel * 5, fProgress, &fQuit);
|
generator.Generate(&fField, 40 - fLevel * 5, fProgress, &fQuit);
|
||||||
printf("generated in %g msecs\n",
|
printf(B_TRANSLATE_WITH_CONTEXT("generated in %g msecs\n",
|
||||||
|
"When Sudoku is launched from a Terminal window, this message "
|
||||||
|
"is shown there."),
|
||||||
(system_time() - start) / 1000.0);
|
(system_time() - start) / 1000.0);
|
||||||
|
|
||||||
BMessage done(kMsgSudokuGenerated);
|
BMessage done(kMsgSudokuGenerated);
|
||||||
@@ -138,8 +144,8 @@ GenerateSudoku::_GenerateThread(void* _self)
|
|||||||
|
|
||||||
|
|
||||||
SudokuWindow::SudokuWindow()
|
SudokuWindow::SudokuWindow()
|
||||||
: BWindow(BRect(100, 100, 500, 520), "Sudoku", B_TITLED_WINDOW,
|
: BWindow(BRect(100, 100, 500, 520), B_TRANSLATE("Sudoku"),
|
||||||
B_ASYNCHRONOUS_CONTROLS | B_QUIT_ON_WINDOW_CLOSE),
|
B_TITLED_WINDOW, B_ASYNCHRONOUS_CONTROLS | B_QUIT_ON_WINDOW_CLOSE),
|
||||||
fGenerator(NULL),
|
fGenerator(NULL),
|
||||||
fStoredState(NULL),
|
fStoredState(NULL),
|
||||||
fExportFormat(kExportAsText)
|
fExportFormat(kExportAsText)
|
||||||
@@ -189,29 +195,31 @@ SudokuWindow::SudokuWindow()
|
|||||||
// add menu
|
// add menu
|
||||||
|
|
||||||
// "File" menu
|
// "File" menu
|
||||||
BMenu* menu = new BMenu("File");
|
BMenu* menu = new BMenu(B_TRANSLATE("File"));
|
||||||
fNewMenu = new BMenu("New");
|
fNewMenu = new BMenu(B_TRANSLATE("New"));
|
||||||
menu->AddItem(new BMenuItem(fNewMenu, new BMessage(kMsgGenerateSudoku)));
|
menu->AddItem(new BMenuItem(fNewMenu, new BMessage(kMsgGenerateSudoku)));
|
||||||
fNewMenu->Superitem()->SetShortcut('N', B_COMMAND_KEY);
|
fNewMenu->Superitem()->SetShortcut('N', B_COMMAND_KEY);
|
||||||
|
|
||||||
BMessage* message = new BMessage(kMsgGenerateSudoku);
|
BMessage* message = new BMessage(kMsgGenerateSudoku);
|
||||||
message->AddInt32("level", kEasyLevel);
|
message->AddInt32("level", kEasyLevel);
|
||||||
fNewMenu->AddItem(new BMenuItem("Easy", message));
|
fNewMenu->AddItem(new BMenuItem(B_TRANSLATE("Easy"), message));
|
||||||
message = new BMessage(kMsgGenerateSudoku);
|
message = new BMessage(kMsgGenerateSudoku);
|
||||||
message->AddInt32("level", kAdvancedLevel);
|
message->AddInt32("level", kAdvancedLevel);
|
||||||
fNewMenu->AddItem(new BMenuItem("Advanced", message));
|
fNewMenu->AddItem(new BMenuItem(B_TRANSLATE("Advanced"), message));
|
||||||
message = new BMessage(kMsgGenerateSudoku);
|
message = new BMessage(kMsgGenerateSudoku);
|
||||||
message->AddInt32("level", kHardLevel);
|
message->AddInt32("level", kHardLevel);
|
||||||
fNewMenu->AddItem(new BMenuItem("Hard", message));
|
fNewMenu->AddItem(new BMenuItem(B_TRANSLATE("Hard"), message));
|
||||||
|
|
||||||
fNewMenu->AddSeparatorItem();
|
fNewMenu->AddSeparatorItem();
|
||||||
fNewMenu->AddItem(new BMenuItem("Blank", new BMessage(kMsgNewBlank)));
|
fNewMenu->AddItem(new BMenuItem(B_TRANSLATE("Blank"),
|
||||||
|
new BMessage(kMsgNewBlank)));
|
||||||
|
|
||||||
menu->AddItem(new BMenuItem("Start again", new BMessage(kMsgStartAgain)));
|
menu->AddItem(new BMenuItem(B_TRANSLATE("Start again"),
|
||||||
|
new BMessage(kMsgStartAgain)));
|
||||||
menu->AddSeparatorItem();
|
menu->AddSeparatorItem();
|
||||||
BMenu* recentsMenu = BRecentFilesList::NewFileListMenu(
|
BMenu* recentsMenu = BRecentFilesList::NewFileListMenu(
|
||||||
"Open file" B_UTF8_ELLIPSIS, NULL, NULL, this, 10, false, NULL,
|
B_TRANSLATE("Open file" B_UTF8_ELLIPSIS), NULL, NULL, this, 10, false,
|
||||||
kSignature);
|
NULL, kSignature);
|
||||||
BMenuItem *item;
|
BMenuItem *item;
|
||||||
menu->AddItem(item = new BMenuItem(recentsMenu,
|
menu->AddItem(item = new BMenuItem(recentsMenu,
|
||||||
new BMessage(kMsgOpenFilePanel)));
|
new BMessage(kMsgOpenFilePanel)));
|
||||||
@@ -219,35 +227,38 @@ SudokuWindow::SudokuWindow()
|
|||||||
|
|
||||||
menu->AddSeparatorItem();
|
menu->AddSeparatorItem();
|
||||||
|
|
||||||
BMenu* subMenu = new BMenu("Export as" B_UTF8_ELLIPSIS);
|
BMenu* subMenu = new BMenu(B_TRANSLATE("Export as" B_UTF8_ELLIPSIS));
|
||||||
message = new BMessage(kMsgExportAs);
|
message = new BMessage(kMsgExportAs);
|
||||||
message->AddInt32("as", kExportAsText);
|
message->AddInt32("as", kExportAsText);
|
||||||
subMenu->AddItem(new BMenuItem("Text", message));
|
subMenu->AddItem(new BMenuItem(B_TRANSLATE("Text"), message));
|
||||||
message= new BMessage(kMsgExportAs);
|
message= new BMessage(kMsgExportAs);
|
||||||
message->AddInt32("as", kExportAsHTML);
|
message->AddInt32("as", kExportAsHTML);
|
||||||
subMenu->AddItem(new BMenuItem("HTML", message));
|
subMenu->AddItem(new BMenuItem(B_TRANSLATE("HTML"), message));
|
||||||
menu->AddItem(subMenu);
|
menu->AddItem(subMenu);
|
||||||
|
|
||||||
menu->AddItem(item = new BMenuItem("Copy", new BMessage(B_COPY), 'C'));
|
menu->AddItem(item = new BMenuItem(B_TRANSLATE("Copy"),
|
||||||
|
new BMessage(B_COPY), 'C'));
|
||||||
|
|
||||||
menu->AddSeparatorItem();
|
menu->AddSeparatorItem();
|
||||||
|
|
||||||
menu->AddItem(item = new BMenuItem("About Sudoku" B_UTF8_ELLIPSIS,
|
menu->AddItem(item = new BMenuItem(
|
||||||
|
B_TRANSLATE("About Sudoku" B_UTF8_ELLIPSIS),
|
||||||
new BMessage(B_ABOUT_REQUESTED)));
|
new BMessage(B_ABOUT_REQUESTED)));
|
||||||
menu->AddSeparatorItem();
|
menu->AddSeparatorItem();
|
||||||
|
|
||||||
menu->AddItem(new BMenuItem("Quit", new BMessage(B_QUIT_REQUESTED), 'Q'));
|
menu->AddItem(new BMenuItem(B_TRANSLATE("Quit"),
|
||||||
|
new BMessage(B_QUIT_REQUESTED), 'Q'));
|
||||||
menu->SetTargetForItems(this);
|
menu->SetTargetForItems(this);
|
||||||
item->SetTarget(be_app);
|
item->SetTarget(be_app);
|
||||||
menuBar->AddItem(menu);
|
menuBar->AddItem(menu);
|
||||||
|
|
||||||
// "View" menu
|
// "View" menu
|
||||||
menu = new BMenu("View");
|
menu = new BMenu(B_TRANSLATE("View"));
|
||||||
menu->AddItem(item = new BMenuItem("Mark invalid values",
|
menu->AddItem(item = new BMenuItem(B_TRANSLATE("Mark invalid values"),
|
||||||
new BMessage(kMsgMarkInvalid)));
|
new BMessage(kMsgMarkInvalid)));
|
||||||
if ((fSudokuView->HintFlags() & kMarkInvalid) != 0)
|
if ((fSudokuView->HintFlags() & kMarkInvalid) != 0)
|
||||||
item->SetMarked(true);
|
item->SetMarked(true);
|
||||||
menu->AddItem(item = new BMenuItem("Mark valid hints",
|
menu->AddItem(item = new BMenuItem(B_TRANSLATE("Mark valid hints"),
|
||||||
new BMessage(kMsgMarkValidHints)));
|
new BMessage(kMsgMarkValidHints)));
|
||||||
if ((fSudokuView->HintFlags() & kMarkValidHints) != 0)
|
if ((fSudokuView->HintFlags() & kMarkValidHints) != 0)
|
||||||
item->SetMarked(true);
|
item->SetMarked(true);
|
||||||
@@ -255,23 +266,27 @@ SudokuWindow::SudokuWindow()
|
|||||||
menuBar->AddItem(menu);
|
menuBar->AddItem(menu);
|
||||||
|
|
||||||
// "Help" menu
|
// "Help" menu
|
||||||
menu = new BMenu("Help");
|
menu = new BMenu(B_TRANSLATE("Help"));
|
||||||
menu->AddItem(fUndoItem = new BMenuItem("Undo", new BMessage(B_UNDO), 'Z'));
|
menu->AddItem(fUndoItem = new BMenuItem(B_TRANSLATE("Undo"),
|
||||||
|
new BMessage(B_UNDO), 'Z'));
|
||||||
fUndoItem->SetEnabled(false);
|
fUndoItem->SetEnabled(false);
|
||||||
menu->AddItem(fRedoItem = new BMenuItem("Redo", new BMessage(B_REDO), 'Z',
|
menu->AddItem(fRedoItem = new BMenuItem(B_TRANSLATE("Redo"),
|
||||||
|
new BMessage(B_REDO), 'Z',
|
||||||
B_SHIFT_KEY));
|
B_SHIFT_KEY));
|
||||||
fRedoItem->SetEnabled(false);
|
fRedoItem->SetEnabled(false);
|
||||||
menu->AddSeparatorItem();
|
menu->AddSeparatorItem();
|
||||||
|
|
||||||
menu->AddItem(new BMenuItem("Snapshot current",
|
menu->AddItem(new BMenuItem(B_TRANSLATE("Snapshot current"),
|
||||||
new BMessage(kMsgStoreState)));
|
new BMessage(kMsgStoreState)));
|
||||||
menu->AddItem(fRestoreStateItem = new BMenuItem("Restore snapshot",
|
menu->AddItem(fRestoreStateItem = new BMenuItem(
|
||||||
|
B_TRANSLATE("Restore snapshot"),
|
||||||
new BMessage(kMsgRestoreState)));
|
new BMessage(kMsgRestoreState)));
|
||||||
fRestoreStateItem->SetEnabled(fStoredState != NULL);
|
fRestoreStateItem->SetEnabled(fStoredState != NULL);
|
||||||
menu->AddSeparatorItem();
|
menu->AddSeparatorItem();
|
||||||
|
|
||||||
menu->AddItem(new BMenuItem("Solve", new BMessage(kMsgSolveSudoku)));
|
menu->AddItem(new BMenuItem(B_TRANSLATE("Solve"),
|
||||||
menu->AddItem(new BMenuItem("Solve single field",
|
new BMessage(kMsgSolveSudoku)));
|
||||||
|
menu->AddItem(new BMenuItem(B_TRANSLATE("Solve single field"),
|
||||||
new BMessage(kMsgSolveSingle)));
|
new BMessage(kMsgSolveSingle)));
|
||||||
menu->SetTargetForItems(fSudokuView);
|
menu->SetTargetForItems(fSudokuView);
|
||||||
menuBar->AddItem(menu);
|
menuBar->AddItem(menu);
|
||||||
@@ -396,15 +411,16 @@ SudokuWindow::_MessageDropped(BMessage* message)
|
|||||||
char buffer[1024];
|
char buffer[1024];
|
||||||
if (hasRef) {
|
if (hasRef) {
|
||||||
snprintf(buffer, sizeof(buffer),
|
snprintf(buffer, sizeof(buffer),
|
||||||
"Could not open \"%s\":\n"
|
B_TRANSLATE("Could not open \"%s\":\n%s\n"), ref.name,
|
||||||
"%s", ref.name, strerror(status));
|
strerror(status));
|
||||||
} else {
|
} else {
|
||||||
snprintf(buffer, sizeof(buffer), "Could not set Sudoku:\n%s",
|
snprintf(buffer, sizeof(buffer),
|
||||||
|
B_TRANSLATE("Could not set Sudoku:\n%s\n"),
|
||||||
strerror(status));
|
strerror(status));
|
||||||
}
|
}
|
||||||
|
|
||||||
(new BAlert("Sudoku request",
|
(new BAlert(B_TRANSLATE("Sudoku request"),
|
||||||
buffer, "OK", NULL, NULL,
|
buffer, B_TRANSLATE("OK"), NULL, NULL,
|
||||||
B_WIDTH_AS_USUAL, B_STOP_ALERT))->Go();
|
B_WIDTH_AS_USUAL, B_STOP_ALERT))->Go();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -546,8 +562,9 @@ SudokuWindow::MessageReceived(BMessage* message)
|
|||||||
}
|
}
|
||||||
|
|
||||||
case kMsgSudokuSolved:
|
case kMsgSudokuSolved:
|
||||||
(new BAlert("Sudoku request",
|
(new BAlert(B_TRANSLATE("Sudoku request"),
|
||||||
"Sudoku solved - congratulations!", "OK", NULL, NULL,
|
B_TRANSLATE("Sudoku solved - congratulations!\n"),
|
||||||
|
B_TRANSLATE("OK"), NULL, NULL,
|
||||||
B_WIDTH_AS_USUAL, B_IDEA_ALERT))->Go();
|
B_WIDTH_AS_USUAL, B_IDEA_ALERT))->Go();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user