- factor out code
- name color drops git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28075 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -118,6 +118,8 @@ MainWindow::~MainWindow()
|
|||||||
void
|
void
|
||||||
MainWindow::MessageReceived(BMessage* message)
|
MainWindow::MessageReceived(BMessage* message)
|
||||||
{
|
{
|
||||||
|
bool discard = false;
|
||||||
|
|
||||||
if (!fDocument || !fDocument->WriteLock()) {
|
if (!fDocument || !fDocument->WriteLock()) {
|
||||||
BWindow::MessageReceived(message);
|
BWindow::MessageReceived(message);
|
||||||
return;
|
return;
|
||||||
@@ -132,12 +134,19 @@ MainWindow::MessageReceived(BMessage* message)
|
|||||||
(const void **)&color, &len) == B_OK; i++) {
|
(const void **)&color, &len) == B_OK; i++) {
|
||||||
if (len != sizeof(rgb_color))
|
if (len != sizeof(rgb_color))
|
||||||
continue;
|
continue;
|
||||||
|
char name[30];
|
||||||
|
sprintf(name, "Color (#%02x%02x%02x)",
|
||||||
|
color->red, color->green, color->blue);
|
||||||
Style* style = new (nothrow) Style(*color);
|
Style* style = new (nothrow) Style(*color);
|
||||||
|
style->SetName(name);
|
||||||
Style* styles[1] = { style };
|
Style* styles[1] = { style };
|
||||||
AddStylesCommand* styleCommand = new (nothrow) AddStylesCommand(
|
AddStylesCommand* styleCommand = new (nothrow) AddStylesCommand(
|
||||||
fDocument->Icon()->Styles(), styles, 1,
|
fDocument->Icon()->Styles(), styles, 1,
|
||||||
fDocument->Icon()->Styles()->CountStyles());
|
fDocument->Icon()->Styles()->CountStyles());
|
||||||
fDocument->CommandStack()->Perform(styleCommand);
|
fDocument->CommandStack()->Perform(styleCommand);
|
||||||
|
// don't handle anything else,
|
||||||
|
// or we might paste the clipboard on B_PASTE
|
||||||
|
discard = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -151,62 +160,50 @@ MainWindow::MessageReceived(BMessage* message)
|
|||||||
be_app->PostMessage(message);
|
be_app->PostMessage(message);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case B_MIME_DATA:
|
|
||||||
if (message->HasData("text/plain", B_MIME_TYPE)) {
|
|
||||||
status_t err;
|
|
||||||
Icon* icon;
|
|
||||||
icon = new (nothrow) Icon(*fDocument->Icon());
|
|
||||||
if (icon) {
|
|
||||||
StyledTextImporter importer;
|
|
||||||
err = importer.Import(icon, message);
|
|
||||||
if (err >= B_OK) {
|
|
||||||
AutoWriteLocker locker(fDocument);
|
|
||||||
|
|
||||||
SetIcon(NULL);
|
|
||||||
|
|
||||||
// incorporate the loaded icon into the document
|
|
||||||
// (either replace it or append to it)
|
|
||||||
fDocument->MakeEmpty(false);
|
|
||||||
// if append, the document savers are preserved
|
|
||||||
fDocument->SetIcon(icon);
|
|
||||||
SetIcon(icon);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case B_PASTE:
|
case B_PASTE:
|
||||||
if (be_clipboard->Lock()) {
|
case B_MIME_DATA:
|
||||||
status_t err;
|
{
|
||||||
BMessage *clip = be_clipboard->Data();
|
BMessage *clip = message;
|
||||||
|
status_t err;
|
||||||
|
|
||||||
if (!clip || !clip->HasData("text/plain", B_MIME_TYPE)) {
|
if (discard)
|
||||||
be_clipboard->Unlock();
|
break;
|
||||||
|
|
||||||
|
if (message->what == B_PASTE) {
|
||||||
|
if (!be_clipboard->Lock())
|
||||||
break;
|
break;
|
||||||
}
|
clip = be_clipboard->Data();
|
||||||
|
|
||||||
Icon* icon;
|
|
||||||
icon = new (nothrow) Icon(*fDocument->Icon());
|
|
||||||
if (icon) {
|
|
||||||
StyledTextImporter importer;
|
|
||||||
err = importer.Import(icon, clip);
|
|
||||||
if (err >= B_OK) {
|
|
||||||
AutoWriteLocker locker(fDocument);
|
|
||||||
|
|
||||||
SetIcon(NULL);
|
|
||||||
|
|
||||||
// incorporate the loaded icon into the document
|
|
||||||
// (either replace it or append to it)
|
|
||||||
fDocument->MakeEmpty(false);
|
|
||||||
// if append, the document savers are preserved
|
|
||||||
fDocument->SetIcon(icon);
|
|
||||||
SetIcon(icon);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
be_clipboard->Unlock();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!clip || !clip->HasData("text/plain", B_MIME_TYPE)) {
|
||||||
|
if (message->what == B_PASTE)
|
||||||
|
be_clipboard->Unlock();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
Icon* icon;
|
||||||
|
icon = new (nothrow) Icon(*fDocument->Icon());
|
||||||
|
if (icon) {
|
||||||
|
StyledTextImporter importer;
|
||||||
|
err = importer.Import(icon, clip);
|
||||||
|
if (err >= B_OK) {
|
||||||
|
AutoWriteLocker locker(fDocument);
|
||||||
|
|
||||||
|
SetIcon(NULL);
|
||||||
|
|
||||||
|
// incorporate the loaded icon into the document
|
||||||
|
// (either replace it or append to it)
|
||||||
|
fDocument->MakeEmpty(false);
|
||||||
|
// if append, the document savers are preserved
|
||||||
|
fDocument->SetIcon(icon);
|
||||||
|
SetIcon(icon);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (message->what == B_PASTE)
|
||||||
|
be_clipboard->Unlock();
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case MSG_UNDO:
|
case MSG_UNDO:
|
||||||
fDocument->CommandStack()->Undo();
|
fDocument->CommandStack()->Undo();
|
||||||
|
|||||||
Reference in New Issue
Block a user